Linq group by, упорядочить по
У меня есть следующий список
ID Counter SrvID FirstName
-- ------ ----- ---------
1 34 66M James
5 34 66M Keith
3 55 45Q Jason
2 45 75W Mike
4 33 77U Will
Мне нравится делать заказ по ID по возрастанию, а затем
получить первое значение Counter, SrvID, которые идентичны (если они есть).
Таким образом, результат будет примерно таким:
ID Counter SrvID FirstName
-- ------ ----- ---------
1 34 66M James
2 45 75W Mike
3 55 45Q Jason
4 33 77U Will
Обратите внимание, что идентификатор из 5 удаляется из списка, поскольку счетчик и SrvID были идентичны тому, что у меня было для ID 1, но когда первый номер был первым
Я удалил 5.
Это то, что я сделал бы, но не работал
var result = (from ls in list1
group ts by new {ls.Counter, ls.SrvID}
order by ls.ID
select new{
ls.ID,
ls.Counter.FirstOrDefault(),
ls.SrvID.First,
ls.FirstName}).ToList()
Ответы
Ответ 1
list1.GroupBy(item => new { Counter = item.Counter, SrvID = item.SrvID })
.Select(group => new {
ID = group.First().ID,
Counter = group.Key.Counter,
SrvID = group.Key.SrvID,
FirstName = group.First().FirstName})
.OrderBy(item => item.ID);
Ответ 2
Группируйте записи и выбирайте победителя из каждой группы.
var query =
from record in list1
group record by new {record.Counter, record.SrvID } into g
let winner =
(
from groupedItem in g
order by groupedItem.ID
select groupedItem
).First()
select winner;
var otherQuery = list1
.GroupBy(record => new {record.Counter, record.SrvID })
.Select(g => g.OrderBy(record => record.ID).First());