LINQ query on a DataTable

.net, .net-3.5, c#, datatable, linq

Solution

You can't query against the `DataTable`'s Rows collection, since `DataRowCollection` doesn't implement `IEnumerable<T>`. You need to use the `AsEnumerable()` extension for `DataTable`. Like so:

var results = from myRow in myDataTable.AsEnumerable()
where myRow.Field<int>("RowNo") == 1
select myRow;

And as @Keith says, you'll need to add a reference to System.Data.DataSetExtensions

`AsEnumerable()` returns `IEnumerable<DataRow>`. If you need to convert `IEnumerable<DataRow>` to a `DataTable`, use the `CopyToDataTable()` extension.

Below is query with Lambda Expression,

var result = myDataTable
    .AsEnumerable()
    .Where(myRow => myRow.Field<int>("RowNo") == 1);

Problem

I'm trying to perform a LINQ query on a DataTable object and bizarrely I am finding that performing such queries on DataTables is not straightforward. For example: ``` var results = from myRow in myDataTable where results.Field("RowNo") == 1 select results; ``` This is not allowed. How do I get something like this working? I'm amazed that LINQ queries are not allowed on DataTables!

Original source