为了账号安全,请及时绑定邮箱和手机立即绑定

数据表上的Linq查询

数据表上的Linq查询

开心每一天1111 2019-06-18 15:53:54
数据表上的Linq查询我试图对DataTable对象执行LINQ查询,奇怪的是,我发现在DataTables上执行这样的查询并不简单。例如:var results = from myRow in myDataTablewhere results.Field("RowNo") == 1select results;这是不允许的。我怎么能像这样工作呢?我很惊讶LINQ查询在DataTables上是不允许的!
查看完整描述

3 回答

?
烙印99

TA贡献1829条经验 获得超13个赞

您不能查询DataTable收藏,自DataRowCollection没有实现IEnumerable<T>..您需要使用AsEnumerable()延展DataTable..就像这样:

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

正如基思所说,你需要添加一个引用System.Data.DataSetExstance

AsEnumerable()回报IEnumerable<DataRow>..如果你需要转换IEnumerable<DataRow>转到DataTable,使用CopyToDataTable()分机。

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

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


查看完整回答
反对 回复 2019-06-18
?
慕村225694

TA贡献1880条经验 获得超4个赞

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


查看完整回答
反对 回复 2019-06-18
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

这并不是故意不允许在DataTable上使用它们,而是因为DataTables在IQueryable和GenericIEnDigable构造之前就可以执行Linq查询。

这两个接口都需要某种类型的安全验证。DataTable不是强类型的。例如,这也是人们不能对ArrayList进行查询的原因。

要使Linq工作,您需要将结果映射到类型安全对象,然后对其进行查询。


查看完整回答
反对 回复 2019-06-18
  • 3 回答
  • 0 关注
  • 462 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信