Let say we have a value of columns and values in an array which says Column1, ColumnValue1, Column2, ColumnValue2, etc. Now if we want to create a mapping of column with values with specified types as a sql formatted string. For e.g. preparing an Update statement of a Where condition in select statement. This requires to map the .Net types to Sql types while creating the sql expression. 

Below is the example of how to map the values in a string with each column considering the types information:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
  
namespace ConsoleForAnything
{
    public class Program
    {
        static void Main(string[] args)
        {
            // Test the logic
  
            // Sample array of columns and corresponding values
            var columnValueArray = new object[] {"Column1", "Value1", "Column2", 8, "Column3", true, "Column4", DateTime.Now };
  
            Console.WriteLine(ParametersAsSqlColumnValueMap(columnValueArray));
             
            Console.Read();
        }
  
        /// <summary>
        /// The parameters map for sql statements, for e.g. column1 = "value1, column2 = 8 etc.
        /// </summary>
        /// <param name="csvColumnsValues">
        /// The csv columns values in ordered manner {"Column1","value1","column2",8, "column3", true"} .
        /// </param>
        /// <returns>
        /// The <see cref="string"/>.
        /// </returns>
        private static string ParametersAsSqlColumnValueMap(params object[] csvColumnsValues)
        {
  
            Dictionary<string, object> columnsAndValuesMap = new Dictionary<string, object>();
  
            for (int i = 0; i < (csvColumnsValues.Count() - 1); i++, i++)
            {
                columnsAndValuesMap.Add(csvColumnsValues[i].ToString(), csvColumnsValues[i + 1]);
            }
  
            dynamic sql = new ExpandoObject();
  
            StringBuilder columnValueMapperBuilder = new StringBuilder();
  
            List<string> tempOrderedKeys = new List<string>();
  
            tempOrderedKeys.AddRange(columnsAndValuesMap.Keys.ToArray());
  
            foreach (var item in tempOrderedKeys)
            {
                var objectValue = columnsAndValuesMap[item];
                var innerType = objectValue.GetType();
  
                columnValueMapperBuilder.Append(string.Format("{0}={1}", item, TypeMapperToSqlValues(innerType, objectValue)));
  
                // This is to prevent the last , to be added in the columnValueMapperBuilder string
                if ((columnsAndValuesMap.Count - 1) != tempOrderedKeys.IndexOf(item))
                {
                    columnValueMapperBuilder.Append(", ");
                    columnValueMapperBuilder.Append(Environment.NewLine); // this is just for formatting.
                }
            }
  
            return columnValueMapperBuilder.ToString();
        }
  
        /// <summary>
        /// The type mapper to sql values by predicting the type in the object value.
        /// </summary>
        private static string TypeMapperToSqlValues(Type type, object value)
        {
            if (type.IsValueType && !type.IsAutoLayout)
            {
                return string.Format("{0}", value);
            }
            else
            {
                return string.Format("'{0}'", value);
            }
        }
    }
}

Here's the Gist for the same: https://gist.github.com/vendettamit/6779430