当前位置:  开发笔记 > 数据库 > 正文

Linq到Datarow,选择多个列是不同的?

如何解决《Linq到Datarow,选择多个列是不同的?》经验,为你挑选了1个好方法。

基本上我正在尝试将以下mssql查询重现为LINQ

SELECT DISTINCT [TABLENAME], [COLUMNNAME] FROM [DATATABLE]

我最接近的是

Dim query = (From row As DataRow In ds.Tables("DATATABLE").Rows _
                  Select row("COLUMNNAME") ,row("TABLENAME").Distinct

当我这样做时,我得到了错误

范围变量名称只能从没有参数的简单或限定名称推断.

我有点期待它返回一个集合,然后我可以迭代并为每个条目执行操作.也许是数据集合?

作为一个完整的LINQ newb,我不确定我缺少什么.我尝试过变种

Select new with { row("COLUMNNAME") ,row("TABLENAME")}

得到:

匿名类型成员名称只能从不带参数的简单或限定名称推断.

为了解决这个问题,我试过了

 Dim query = From r In ds.Tables("DATATABLE").AsEnumerable _
        Select New String(1) {r("TABLENAME"), r("COLUMNNAME")} Distinct

但它似乎没有正确地做出独特的事情.

此外,有没有人知道任何好的书籍/资源,以流利?



1> Patrick Karc..:

您开始在数据表对象上使用LINQ,您对dt.AsEnumberable运行查询,它返回一个IEnumerable DataRow对象集合.

Dim query = From row As DataRow In ds.Tables("DATATABLE").AsEnumerable _
              Select row("COLUMNNAME") ,row("TABLENAME")

你可能想说row("COLUMNNAME").ToString(),等等.查询将最终成为具有2个字符串属性的匿名类型的IEnumerable; 是你所追求的?您可能需要指定属性的名称; 我不认为编译器会推断它们.

Dim query = From row As DataRow In ds.Tables("DATATABLE").AsEnumerable _
              Select .ColumnName = row("COLUMNNAME"), .TableName = row("TABLENAME")

这假设在您使用ADO获取此数据集的原始sql查询中,您确保结果是不同的.

混淆的常见原因:

一个关键是Linq-to-SQL和(通常称为Linq-to-object活动)LINQ-to-Dataset是两个非常不同的东西.在两者中你都会看到LINQ被使用,所以它经常引起混乱.

LINQ到数据集

是:

1使用数据适配器和连接等使数据表具有与以往相同的旧方式,最终得到传统的数据表对象.然后,不像以前那样迭代行,而是:

2运行linq查询dt.AsEnumerable,这是一个IEnumerable数据行对象.

Linq-to-dataset选择(A)使用Linq-to-SQL而是使用传统的ADO.NET,然后(B)一旦拥有了数据表,使用LINQ(-to-object)来检索/安排/过滤数据表中的数据,而不是我们6年来一直在做的事情.我做了很多.我喜欢我的常规ado sql(使用我开发的工具),但LINQ很棒

LINQ到SQL

是一个不同的野兽,在引擎盖下发生了截然不同的事情.在LINQ-To-SQL中,您:

1使用Visual Studio中的工具定义与您的数据库匹配的模式,该工具为您提供与模式匹配的简单实体对象.
2您使用db Context编写linq查询,并将这些实体作为结果返回.

在幕后,在运行时,.NET将这些LINQ查询转换为SQL并将它们发送到数据库,然后将数据返回转换为您在模式中定义的实体对象.

其他资源:

嗯,这是一个截然不同的摘要.要进一步理解这两个非常独立的东西,请查看:
LINQ-to-SQL
LINQ-to-Dataset

一本关于LINQ的精彩书是LINQ in Action,我的Fabrice Marguerie,Steve Eichert和Jim Wooley(曼宁).去实现它(梦想);去得到它(东西!正是你所追求的.很好.LINQ不是昙花一现,值得一本书.在.NET中,有许多东西需要学习,但掌握LINQ所花费的时间花费了很多时间.

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有