java linq表达式_数据表上的LINQ查询

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

var results = from myRow in myDataTable

where results.Field("RowNo") == 1

select results;

这是不允许的。 如何获得类似的效果?

我很惊讶在数据表上不允许使用LINQ查询!

#1楼

尝试这个

var row = (from result in dt.AsEnumerable().OrderBy( result => Guid.NewGuid()) select result).Take(3) ;

#2楼

这并不是故意禁止在DataTables上使用它们,只是DataTables早于可以在其上执行Linq查询的IQueryable和通用IEnumerable结构。

这两个接口都需要某种类型安全性验证。 数据表不是强类型的。 例如,这就是为什么人们无法针对ArrayList进行查询的相同原因。

为了使Linq正常工作,您需要针对类型安全的对象映射结果,然后针对该对象进行查询。

#3楼

您可以使用LINQ来处理Rows集合上的对象,如下所示:

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

#4楼

正如@ ch00k所说:

using System.Data; //needed for the extension methods to work

...

var results =

from myRow in myDataTable.Rows

where myRow.Field("RowNo") == 1

select myRow; //select the thing you want, not the collection

您还需要添加对System.Data.DataSetExtensions的项目引用

#5楼

您无法查询DataTable的Rows集合,因为DataRowCollection没有实现IEnumerable 。 您需要为DataTable使用AsEnumerable()扩展。 像这样:

var results = from myRow in myDataTable.AsEnumerable()

where myRow.Field("RowNo") == 1

select myRow;

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

以下是Lambda表达式查询,

var result = myDataTable

.AsEnumerable()

.Where(myRow => myRow.Field("RowNo") == 1);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值