C# 使用Linq从数据表中获取不同的行(使用多个列进行区分)
我正在尝试区分多个列,并从datatable中获取datarows。但这是一个错误C# 使用Linq从数据表中获取不同的行(使用多个列进行区分),c#,vb.net,linq,linq-to-objects,C#,Vb.net,Linq,Linq To Objects,我正在尝试区分多个列,并从datatable中获取datarows。但这是一个错误 Dim query As IEnumerable(Of DataRow) = (From row As DataRow In SourceTable.AsEnumerable() _ Select row.Field(Of String)("ColumnName1"), row.Field(Of String)("Col
Dim query As IEnumerable(Of DataRow) =
(From row As DataRow In SourceTable.AsEnumerable() _
Select row.Field(Of String)("ColumnName1"),
row.Field(Of String)("ColumnName2") ).Distinct()
以下错误:
Unable to cast object of type '<DistinctIterator>d__7a`1[System.String]'
to type 'System.Collections.Generic.IEnumerable`1[System.Data.DataRow]'.
无法强制转换类型为“d__7a`1[System.String]的对象”
输入'System.Collections.Generic.IEnumerable'1[System.Data.DataRow]'。
我需要另一个基于SourceTable中给定列的具有不同行的datatable。试试这个(我有点猜测):
试试这个
var distinctRows = (from DataRow dRow in dTable.Rows
select new col1=dRow["dataColumn1"],col2=dRow["dataColumn2"]}).Distinct();
这是C#。将其转换为vb.net然后试试这个
Dim query = From q In (From p In dt.AsEnumerable() Select New With {.col1= p("ColumnName1"), .col2 = p("ColumnName2")}) Select q.col1, q.col2 Distinct
您在LINQ投影前面缺少一个大括号,但我明白您的意思。这个大括号没有返回不同的列您可以使用datatable中的不同支持-ToTable()有一个重载,允许您指定是否只返回不同的值和参数字符串[]参数指定要在新表中包含哪些列。啊,该死,我应该更加注意错误消息。我现在拿到了。您的问题不在于SQL语法,而在于您期望的数据类型,因为您在投影包含一对字符串的元组时将其标记为可枚举的数据行集合。请更改语法,以便投影一个新的数据行,并将每个字符串添加为列,或者将其删除为(数据行的)IEnumerable并接受隐式类型作为结果。如何使用“查询”对象。我的意思是如何迭代?
Dim query = From q In (From p In dt.AsEnumerable() Select New With {.col1= p("ColumnName1"), .col2 = p("ColumnName2")}) Select q.col1, q.col2 Distinct