Querying the Data table using LINQ

In normal mode you cannot query the Data table using linq, if you do it means you will get null value.

Solution:

  1. Add the System.Data.DataSetExtensions as reference in your project.

  2. Convert the data table as AsEnumerable.

  3. Using anonymous method and try to separate the values as properties or entities.

  4. Now query the above result using LINQ.

Example:

  1. DataRow _dataRow0, _dataRow1, _dataRow2, _dataRow3, _dataRow4, _dataRow5;  
  2.     DataTable _datatable = new DataTable();  
  3.   
  4.     _datatable.Columns.Add("Name");  
  5.     _datatable.Columns.Add("ID");  
  6.     _datatable.Columns.Add("Paid");  
  7.     _datatable.Columns.Add("Employed");  
  8.   
  9.     string[] str = { "id""Name""A" };  
  10.   
  11.     _dataRow0 = _datatable.NewRow();  
  12.     _dataRow0[0] = "Arun";  
  13.     _dataRow0[1] = 1;  
  14.     _dataRow0[2] = 'Y';  
  15.     _dataRow0[3] = 'N';  
  16.   
  17.     _dataRow1 = _datatable.NewRow();  
  18.     _dataRow1[0] = "Aruna";  
  19.     _dataRow1[1] = 2;  
  20.     _dataRow1[2] = 'N';  
  21.     _dataRow1[3] = 'N';  
  22.   
  23.     _dataRow2 = _datatable.NewRow();  
  24.     _dataRow2[0] = "Arun";  
  25.     _dataRow2[1] = 3;  
  26.     _dataRow2[2] = 'Y';  
  27.     _dataRow2[3] = 'Y';  
  28.   
  29.     _dataRow3 = _datatable.NewRow();  
  30.     _dataRow3[0] = "Aswin";  
  31.     _dataRow3[1] = 4;  
  32.     _dataRow3[2] = 'Y';  
  33.     _dataRow3[3] = 'N';  
  34.   
  35.     _dataRow4 = _datatable.NewRow();  
  36.     _dataRow4[0] = "Senthil";  
  37.     _dataRow4[1] = 5;  
  38.     _dataRow4[2] = 'Y';  
  39.     _dataRow4[3] = 'N';  
  40.   
  41.     _dataRow5 = _datatable.NewRow();  
  42.     _dataRow5[0] = "ArunKUMARI";  
  43.     _dataRow5[1] = 5;  
  44.     _dataRow5[2] = 'Y';  
  45.     _dataRow5[3] = 'N';  
  46.   
  47.     _datatable.Rows.Add(_dataRow0);  
  48.     _datatable.Rows.Add(_dataRow1);  
  49.     _datatable.Rows.Add(_dataRow2);  
  50.     _datatable.Rows.Add(_dataRow3);  
  51.     _datatable.Rows.Add(_dataRow4);  
  52.     _datatable.Rows.Add(_dataRow5);  
  53.   
  54.     var dt1 = _datatable.AsEnumerable().Select(p => new  
  55.     {  
  56.         _ID = p.Field<string>("ID"),  
  57.         _Name = p.Field<string>("Name"),  
  58.         _Paid = p.Field<string>("Paid"),  
  59.         _Employed = p.Field<string>("Employed")  
  60.     });  
  61.   
  62.   
  63.     var idr2 = (from xx in dt1  
  64.                 where xx._Employed == "Y"  
  65.                 orderby xx._Name  
  66.                 select xx._Name).Distinct();  
  67.   
  68.     foreach (string a in idr2)  
  69.         Console.WriteLine(a);  
By using anonymous method secrete the values.
  1. var dt1 = _datatable.AsEnumerable().Select(p => new  
  2. {  
  3.    _ID = p.Field<string>("ID"),  
  4.    _Name = p.Field<string>("Name"),  
  5.    _Paid = p.Field<string>("Paid"),  
  6.    _Employed = p.Field<string>("Employed")  
  7. });  
Now using LINQ, query the data as you want.