In this post, here is the C# code to convert DataTable to Dictionary.
while working with DataSet or DataTable we may need key value pair to get Value by Id approach.
So you may need to convert your DataTable to key value type i.e, Dictionary. you can also use Dictionary for data binding of controls like Dropdown list, Radio button list etc.
Here we will see a sample console program where we convert DataTable to Dictionary and print the Dictionary.
I have written 2 overrides for a method DataTabelToDictionary().
The Method code is given below :

  /// <summary>

 /// Converts DataTable to Dictionary
 /// </summary>
 /// <param name=”dt”>DataTable</param>
 /// <param name=”keyIndex”>Column Index for Dictionary Key</param>
 /// <param name=”ValueIndex”>Column Index for DIctionary Value</param>
 /// <returns></returns>
  public Dictionary<object, object> DataTableToDictionary(DataTable dt, int keyIndex, int ValueIndex)
 {
    return dt.AsEnumerable()
            .ToDictionary<DataRow, object, object>(row => row.Field<object>(keyIndex),
                                        row => row.Field<object>(ValueIndex));
 }
 

  /// <summary>

  /// Converts DataTable to Dictionary
  /// </summary>
  /// <param name=”dt”>DataTable</param>
  /// <param name=”keyIndex”>Column Name for Dictionary Key </param>
  /// <param name=”ValueIndex”>Column Name for Dictionary Value</param>
  /// <returns></returns>
  public Dictionary<object, object> DataTableToDictionary(DataTable dt, string keyColName, string ValColName)
  {
    return dt.AsEnumerable()
         .ToDictionary<DataRow, object, object>(row => row.Field<object>(keyColName),
                                        row => row.Field<object>(ValColName));
  }

The Program below is an example of converting DataTable to Dictionary.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Data;
namespace Dtable2Dict
{
    class Program
    {
        static void Main(string[] args)
        {
            Program objProg = new Program();
            DataTable dtDept = objProg.getDepartments();
            Dictionary<object, object> dicTest;
           
            //converting DataTable to Dictionary
            dicTest = objProg.DataTabelToDictionary(dtDept, “DeptId”, “DeptName”);
            //Converting Dictionary to our required Dictionary Type
            Dictionary<int, string> dicThruColNames = dicTest.ToDictionary(k => Convert.ToInt32(k.Key),
                                                k => k.Value == null ? “” : k.Value.ToString());
            dicTest = objProg.DataTabelToDictionary(dtDept, 0, 1);
            Dictionary<int, string> dicThruColIndex = dicTest.ToDictionary(k => Convert.ToInt32(k.Key),
                                                    k => k.Value == null ? “” : k.Value.ToString());
            //Printing Dictionary
            Console.WriteLine(“\n*** www.programmingposts.com ***\n”);
            Console.WriteLine(“\n>>> Program for DataTable to Dictionary Conversion <<<\n”);
            
            Console.WriteLine(“Printing Converted Dictionary :”);
            Console.WriteLine(“Key || Value”);
            foreach (KeyValuePair<int, string> pair in dicThruColNames)
            {
                Console.WriteLine(pair.Key + ”  “+ pair.Value);
            }
            Console.ReadLine();
        }
        /// <summary>
        /// returns sample DataTable
        /// </summary>
        /// <returns></returns>
        private DataTable getDepartments()
        {
            DataTable dtDept = newDataTable();
            dtDept.Columns.Add(“DeptId”, typeof(Int32));
            dtDept.Columns.Add(“DeptName”, typeof(String));
            dtDept.Columns.Add(“DeptEmpCount”, typeof(Int32));
            DataRow dr;
            for (int i = 1; i <= 5; i++)
            {
                dr = dtDept.NewRow();
                dr[“DeptId”] = i;
                dr[“DeptName”] = “Dept” + i.ToString();
                dr[“DeptEmpCount”] = (i * 10);
                dtDept.Rows.Add(dr);
            }
            return dtDept;
        }
        /// <summary>
        /// Converts DataTable to Dictionary
        /// </summary>
        /// <param name=”dt”>DataTable</param>
        /// <param name=”keyIndex”>Column Index for Dictionary Key</param>
        /// <param name=”ValueIndex”>Column Index for DIctionary Value</param>
        /// <returns></returns>
        public Dictionary<object, object> DataTabelToDictionary(DataTable dt, int keyIndex, intValueIndex)
        {
            return dt.AsEnumerable()
              .ToDictionary<DataRow, object, object>(row => row.Field<object>(keyIndex),
                                        row => row.Field<object>(ValueIndex));
        }
        /// <summary>
        /// Converts DataTable to Dictionary
        /// </summary>
        /// <param name=”dt”>DataTable</param>
        /// <param name=”keyIndex”>Column Name for Dictionary Key </param>
        /// <param name=”ValueIndex”>Column Name for Dictionary Value</param>
        /// <returns></returns>
        public Dictionary<object, object> DataTabelToDictionary(DataTable dt, string keyColName, 
                                           string ValColName)
        {
            return dt.AsEnumerable()
              .ToDictionary<DataRow, object, object>(row => row.Field<object>(keyColName),
                                        row => row.Field<object>(ValColName));
        }
    }
}


output:

DataTable-to-Dictionary-C-Sharp-output