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所花费的时间花费了很多时间.