在DataTable上进行LINQ查询

我试图对DataTable对象执行LINQ查询,奇怪的是我发现在DataTable上执行这样的查询并不简单。 例如:

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

这是不允许的。 我如何得到这样的工作?

我很惊讶LINQ查询不允许在DataTable上!


由于DataRowCollection未实现IEnumerable<T> ,因此无法对DataTable的Rows集合进行查询。 您需要为DataTable使用AsEnumerable()扩展。 像这样:

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()扩展。


var results = from DataRow myRow in myDataTable.Rows
    where (int)myRow["RowNo"] == 1
    select myRow

这并不是说他们故意不允许在DataTable上使用,而只是DataTable会预先记录可以执行Linq查询的IQueryable和泛型IEnumerable构造。

这两个接口都需要进行一些类型安全验证。 数据表不是强类型的。 例如,这与人们无法查询ArrayList的原因相同。

对于Linq的工作,您需要将结果映射到类型安全的对象,并针对该对象进行查询。

链接地址: http://www.djcxy.com/p/5845.html

上一篇: LINQ query on a DataTable

下一篇: Best Practice Queue/Topic Design in a MicroService Architecture