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
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