linq - How to get maximum Id in List and then return list -
i have structure this:
no id name status 1 1 1 2 1 b 1 3 1 c 1 4 1 d 1 5 2 e 3 6 2 f 3 7 2 g 3 i want run linq when list results maximum row each status , row details well.like:
no id name status 4 1 d 1 7 2 g 3 means latest entry status.
is there way around, have tried max, orderby descending single result need list result.
you have extract groups of same id (groupby), , export max no each group, selectmany :
public void exec() { var items = new list<item>{ new item{ no = 1, id = 1, name = "a", status = 1} , new item{ no = 2, id = 1, name = "b", status = 1} , new item{ no = 3, id = 1, name = "c", status = 1} , new item{ no = 4, id = 1, name = "d", status = 1} , new item{ no = 5, id = 2, name = "e", status = 1} , new item{ no = 6, id = 2, name = "f", status = 1} , new item{ no = 7, id = 2, name = "g", status = 1} , }; var result = items .groupby(groupeditems => groupeditems.id) .selectmany(i => items .where(inneritem => inneritem.id == i.key && inneritem.no == i.max(ii => ii.no)) .select(inneritem => inneritem) ); foreach (var item in result) console.writeline("max item of id {0} : no = {1}, name = {2}, status = {3}", item.id, item.no, item.name, item.status); } private class item { public int32 no { get; set; } public int32 id { get; set; } public string name { get; set; } public int32 status { get; set; } } output :
max item of id 1 : no = 4, name = d, status = 1 max item of id 2 : no = 7, name = g, status = 1 alternative:
items.groupby(groupeditems => groupeditems.id) .select(g => g.orderbydescending(x => x.no).first())
Comments
Post a Comment