c# - Is it possible to do a Group By in LINQ but then only return the 'most recent' item (per group)? -


i'm trying return recent item, per group, in .net linq.

it reminds me of doing partition in sql partition , top 1 per partition, ordered recent (per partition).

so far i've got start of linq code..

from p in products group p new {p.provider.productid, p.provider.name} g 

but i'm not sure how add order p.createdon desc , .take(1), per partition/group.

something (appended @ end of query):

select new {     g.key,     product = g.orderbydescending(x => x.createdon).first() } 

should job; or perhaps more conveniently:

select new {     g.key.productid,     g.key.name,     product = g.orderbydescending(x => x.createdon).first() } 

or if don't need key explicitly (because available under item anyway), just:

select g.orderbydescending(x => x.createdon).first() 

basically, each g igrouping<t> (for anonymous t), means each g has .key property group, , each g is ienumerable<> sequence of original elements (presumably product).


Comments