我试图对DataTable对象执行LINQ查询,但奇怪的是,我发现对DataTables执行此类查询并不简单。例如:
var results = from myRow in myDataTable
where results.Field("RowNo") == 1
select results;
这是不允许的。我如何获得类似的效果?
我很惊讶在数据表上不允许使用LINQ查询!
最佳答案
您无法查询DataTable
的Rows集合,因为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()
扩展名。以下是Lambda表达式查询,
var result = myDataTable
.AsEnumerable()
.Where(myRow => myRow.Field<int>("RowNo") == 1);