我在表格中有以下结构:
UniqueId Type size RelatedId
--------------------------------------------
1 honda 100 1
2 mercedes 200 3
3 mazda 300 4
4 mercedes 150 3
5 merecedes 200 3
6 ford 180 2
7 mercedes 900 5
依旧......
我想写一个查询来获取:
前3个项目按ONLY本田或梅赛德斯按其大小排序。
此外,在考虑特定Type的行时,可能有多行可能具有相同的RelatedId,如果是这种情况,我想考虑该特定RelatedId的最大UniqueId行。
例如:在下表中,我有3行,其中RelatedId = 3表示梅赛德斯类型,
2 mercedes 200 3
4 mercedes 150 3
5 mercedes 200 3
在这种情况下,我想只考虑具有UniqueId = 5的行,因为这是最新的。 在我的组类型结果集中:" mercedes",我希望我的结果集得到:
mercedes :
7 mercedes 900 5
5 merecedes 200 3
我能写出这样的东西:
items.GroupBy( x => x.Type).SelectMany(g => g.OrderByDescending(r => r.size)).Take(10).
我如何分组以便只考虑本田或奔驰?
此外,这包括可能具有相同RelatedId ...的行(我希望在这种情况下对于这些行具有最高UniqueId的行)如何更改查询以解决此问题?
我期望的最终结果集:
1 honda 100 1
7 mercedes 900 5
5 merecedes 200 3
谢谢大家。
答案 0 :(得分:0)
首先,您只需在查询中添加Where
即可获得本田和梅赛德斯
items.Where(e=>e.Type=="honda" || e.Type=="mercedes")...
现在,对于第二部分,您可以按多列进行分组:
items.Where(e=>e.Type=="honda" || e.Type=="mercedes")
.GroupBy( x => new{x.Type,x.RelatedId})
.Select(g => g.OrderByDescending(r => r.UniqueId).FirstOrDefault())
.OrderByDescending(r => r.size)
.Take(10);