我正在尝试对 DataTable 对象执行 LINQ 查询,但奇怪的是,我发现对 DataTables 执行此类查询并不简单。例如:
var results = from myRow in myDataTable where results.Field("RowNo") == 1 select results;
这是不允许的。我怎样才能得到这样的工作?
我很惊讶数据表上不允许使用 LINQ 查询!
您不能查询DataTable‘s Rows 集合,因为DataRowCollection没有实现IEnumerable<T>. 您需要AsEnumerable()使用DataTable. 像这样:
DataTable
DataRowCollection
IEnumerable<T>
AsEnumerable()
var results = from myRow in myDataTable.AsEnumerable() where myRow.Field<int>("RowNo") == 1 select myRow;
您需要添加对System.Data.DataSetExtensions的引用
AsEnumerable()返回IEnumerable<DataRow>。如果您需要转换IEnumerable<DataRow>为DataTable,请使用CopyToDataTable()扩展名。
IEnumerable<DataRow>
CopyToDataTable()
下面是使用 Lambda 表达式的查询,
var result = myDataTable .AsEnumerable() .Where(myRow => myRow.Field<int>("RowNo") == 1);