LINQ 查询以获取基于不同列的所有数据行

LINQ query to get the all the datarows based on a distinct column

VB.Net中我有下面的LINQ查询

Dim temp = (From r In datatable Select r Order By r.str Descending)

但我希望它基于 str 列是唯一的。我知道如何从 LINQ 中获取 str column 并将其标记为 distinct。但我想要整行(所有列)并且具有基于 str

的不同

类似

 Dim temp = (From r In datatable Select r Order By r.str Descending).distinct(r.str)

如果有人能用 C# 给我答案,我会翻译成 VB.Net

样本

数据表

col1 col2 str
A    B     X
A1   B1    Y
A2   B2    X

输出应该是

col1 col2 str
A     B    X
A1    B1   Y

如果您只想 select 具有相同 str 字段值的行的第一行:

from r in datatable.AsEnumerable()
group r by r.Field<string>("str") into g
orderby g.Key descending
select g.First()

或方法语法

datatable.AsEnumerable()
         .GroupBy(r => r.Field<string>("str"))
         .OrderByDescending(g => g.Key)
         .Select(g => g.First())

首先按要区分的列分组,然后 select 每组中的第一个。这将为您提供指定字段中每个不同值的所有列。

dim results = myDataContext.myTable.GroupBy(Function(f) f.myDistinctField).Select(Function(j) j.FirstOrDefault())