Linq, selecting columns as IEnumerable <DataRow>

how can i do this in linq:

IEnumerable<DataRow> query = from rec in dt.AsEnumerable() where rec.Field<decimal>("column2") == 1 && foo(rec.Field<decimal>("column1")) select new { column1 = rec.Field<decimal>("column1"), column2 = rec.Field<decimal>("column2"), column3 = rec.Field<decimal>("column3")} ; 

this does not work. I am trying to select some columns as a new datatable and then join it later with some other datatable.

+4
source share
1 answer

You can use http://code.msdn.microsoft.com/LinqEntityDataReader and then select your values ​​as follows:

 DataTable query = (from rec in dt.AsEnumerable() where rec.Field<decimal>("column2") == 1 && foo(rec.Field<decimal>("column1")) select new { column1 = rec.Field<decimal>("column1"), column2 = rec.Field<decimal>("column2"), column3 = rec.Field<decimal>("column3")}).ToDataTable(); 

A simpler solution that does not require external libraries would be to create a DataTable (if you do not already have one) and populate it as follows:

 // declaring a data table.. Replace it with whatever code you want var table = new DataTable(); table.Columns.Add("column1", typeof(Decimal)); table.Columns.Add("column2", typeof(Decimal)); table.Columns.Add("column3", typeof(Decimal)); // Populate the table (from rec in dt.AsEnumerable() where rec.Field<decimal>("column2") == 1 && foo(rec.Field<decimal>("column1")) select new { column1 = rec.Field<decimal>("column1"), column2 = rec.Field<decimal>("column2"), column3 = rec.Field<decimal>("column3")}) .Aggregate(table, (dt, r) => { dt.Rows.Add(r.column1, r.column2, r.column3); return dt; }); // at this point your table variable is populated 
+10
source

Source: https://habr.com/ru/post/1307434/


All Articles