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())