vb.net – Linq到Datarow,选择多个列是不同的?
基本上我正在尝试将以下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 但它似乎没有正确地做出独特的事情. 此外,有没有人知道任何好的书籍/资源,以流利? 解决方法
您开始在数据表对象上使用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中的工具定义与您的数据库匹配的模式,该工具为您提供与模式匹配的简单实体对象. 在幕后,在运行时,.NET将这些LINQ查询转换为SQL并将它们发送到数据库,然后将数据返回转换为您在模式中定义的实体对象. 其他资源: 嗯,这是一个截然不同的摘要.要进一步了解这两个非常独立的事情,请查看: 一本关于LINQ的精彩书是LINQ in Action,我的Fabrice Marguerie,Steve Eichert和Jim Wooley(曼宁).去实现它(梦想);去得到它(东西!正是你所追求的.很好. LINQ不是昙花一现,值得一本书.在.NET中,有许多东西需要学习,但掌握LINQ所花费的时间花费了很多时间. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |