Szukam sposobu w LINQ, aby dopasować następujące zapytanie SQL.
Select max(uid) as uid, Serial_Number from Table Group BY Serial_Number
Naprawdę szukam pomocy w tej sprawie. Powyższe zapytanie pobiera maksymalny identyfikator użytkownika każdego numeru seryjnego ze względu na Group By
składnię.
.net
linq
linq-to-sql
SpoiledTechie.com
źródło
źródło
var q = from s in db.Serials group s by s.Serial_Number into g select new {Serial_Number = g.Key, MaxUid = g.Max(s => s.uid) }
źródło
W postaci łańcucha metod:
db.Serials.GroupBy(i => i.Serial_Number).Select(g => new { Serial_Number = g.Key, uid = g.Max(row => row.uid) });
źródło
Sprawdziłem odpowiedź DamienG w LinqPad. Zamiast
g.Group.Max(s => s.uid)
Powinien być
g.Max(s => s.uid)
Dziękuję Ci!
źródło
Odpowiedzi są OK, jeśli potrzebujesz tylko tych dwóch pól, ale w przypadku bardziej złożonego obiektu może być przydatne takie podejście:
from x in db.Serials group x by x.Serial_Number into g orderby g.Key select g.OrderByDescending(z => z.uid) .FirstOrDefault()
... pozwoli to uniknąć „wybierz nowy”
źródło
Można to zrobić za pomocą GroupBy i SelectMany w wyrażeniu lamda LINQ
var groupByMax = list.GroupBy(x=>x.item1).SelectMany(y=>y.Where(z=>z.item2 == y.Max(i=>i.item2)));
źródło