LINQ-запрос для получения всех датаров на основе отдельного столбца

В VB.Net у меня ниже LINQ Query

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

Но я хочу, чтобы он был уникальным на основе str колонка. Я знаю, как получить только str column из LINQ и пометить его как 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

2 ответа

Решение

Если вы хотите выбрать только первую строку из строк с одинаковыми 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())

Первая группа по столбцу, который вы хотите выделить, затем выберите первую из каждой группы. Это даст вам все столбцы для каждого отдельного значения в указанном поле.

dim results = myDataContext.myTable.GroupBy(Function(f) f.myDistinctField).Select(Function(j) j.FirstOrDefault())
Другие вопросы по тегам