当前位置 : 主页 > 编程语言 > c语言 >

vb.net – Linq到Datarow,选择多个列是不同的?

来源:互联网 收集:自由互联 发布时间:2021-06-24
基本上我正在尝试将以下mssql查询重现为LINQ SELECT DISTINCT [TABLENAME], [COLUMNNAME] FROM [DATATABLE] 我最接近的是 Dim query = (From row As DataRow In ds.Tables("DATATABLE").Rows _ Select row("COLUMNNAME") ,row("TABLENA
基本上我正在尝试将以下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

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

Range variable name can be inferred
only from a simple or qualified name
with no arguments.

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

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

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

得到:

Anonymous type member name can be
inferred only from a simple or
qualified name with no arguments.

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

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

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

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

您开始在数据表对象上使用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所花费的时间花费了很多时间.

网友评论