对数据表的 LINQ 查询 [英] LINQ query on a DataTable

查看:32
本文介绍了对数据表的 LINQ 查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试对 DataTable 对象执行 LINQ 查询,但奇怪的是我发现在 DataTables 上执行此类查询并不简单.例如:

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?

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

I'm amazed that LINQ queries are not allowed on DataTables!

推荐答案

您不能查询 DataTableRows 集合,因为 DataRowCollection 没有实现 IEnumerable.您需要为 DataTable 使用 AsEnumerable() 扩展.像这样:

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;

正如 @Keith 所说,您需要添加对 System.Data.DataSetExtensions

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

AsEnumerable() 返回 IEnumerable.如果您需要将 IEnumerable 转换为 DataTable,请使用 CopyToDataTable() 扩展.

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

下面是使用 Lambda 表达式的查询,

Below is query with Lambda Expression,

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

这篇关于对数据表的 LINQ 查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆