我试图对DataTable对象执行LINQ查询,但奇怪的是,我发现对DataTables执行此类查询并不简单。例如:
var results = from myRow in myDataTable where results.Field("RowNo") == 1 select results;
这是不允许的。如何获得类似的效果?
我很惊讶在数据表上不允许使用LINQ查询!
由于未实现,因此您无法针对DataTable的 Rows 集合进行查询。您需要将扩展名用于。像这样:DataRowCollection``IEnumerable<T>``AsEnumerable()``DataTable
DataTable
DataRowCollection``IEnumerable<T>``AsEnumerable()``DataTable
var results = from myRow in myDataTable.AsEnumerable() where myRow.Field<int>("RowNo") == 1 select myRow;
正如@Keith所说,您需要添加对System.Data.DataSetExtensions的引用
AsEnumerable()返回IEnumerable<DataRow>。如果您需要转换IEnumerable<DataRow>为DataTable,请使用CopyToDataTable()扩展名。
AsEnumerable()
IEnumerable<DataRow>
CopyToDataTable()
以下是Lambda表达式查询,
var result = myDataTable .AsEnumerable() .Where(myRow => myRow.Field<int>("RowNo") == 1);