我有一个包含两个或多个类Agent对象的列表.
名称="A"
优先级= 0
ResultCount = 100
;
名称="B"
优先级= 1
ResultCount = 100
;
两个对象都具有相同的ResultCount.在这种情况下,我只需要一个对象,而不是两个或更多.我使用带有Distinct的Linq查询和自定义的Comparer执行此操作.
IEnumerable<Agent> distinctResultsAgents =
(from agt in distinctUrlsAgents select agt).Distinct(comparerResultsCount);
Run Code Online (Sandbox Code Playgroud)
使用此查询,我只从列表中获取一个对象,但我永远不知道哪一个.但我不想要任何对象,我想要对象"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;
}
Run Code Online (Sandbox Code Playgroud)
首先对元素进行分组,ResultCount以便只为每个不同的值得到一个结果ResultCount.然后为每个组选择具有最高优先级的该组中的元素.
试试这个查询:
IEnumerable<Agent> distinctResultsAgents =
from d in distinctUrlsAgents
group d by d.ResultCount into g
select g.OrderByDescending(x => x.Priority).First();
Run Code Online (Sandbox Code Playgroud)
如果你使用morelinq,你可以使用一个名为MaxBy的函数而不是最后一行,但请注意它只适用于LINQ To Objects.
| 归档时间: |
|
| 查看次数: |
391 次 |
| 最近记录: |