我有一个包含两个或多个类Agent对象的列表。
名称=“A”
优先级= 0
ResultCount = 100
姓名=“B”
优先级= 1
ResultCount = 100
两个对象具有相同的ResultCount。在这种情况下,我只需要一个对象,而不是两个或更多。我使用带有Distinct的Linq查询和自定义的Comparer来完成此操作。
IEnumerable<Agent> distinctResultsAgents =
(from agt in distinctUrlsAgents select agt).Distinct(comparerResultsCount);
使用此查询,我只从列表中获取一个对象,但我永远不知道哪一个。 但我不想要任何对象,我想要对象“B”,因为优先级高于对象“A”。 我怎么能这样做?
我的自定义Comparer非常简单,并且有这样的方法:
public bool Equals(Agent x, Agent y)
{
if (x == null || y == null)
return false;
if (x.ResultCount == y.ResultCount)
return true;
return false;
}
答案 0 :(得分:6)
首先按ResultCount
对元素进行分组,这样您只能获得ResultCount
的每个不同值的一个结果。然后为每个组选择该组中具有最高优先级的元素。
尝试此查询:
IEnumerable<Agent> distinctResultsAgents =
from d in distinctUrlsAgents
group d by d.ResultCount into g
select g.OrderByDescending(x => x.Priority).First();
如果您使用morelinq,则可以使用名为MaxBy的函数代替最后一行,但请注意,它仅适用于LINQ To Objects。