如何使用Distinct从Linq查询中选择特定对象?

Tal*_*ode 1 c# linq

我有一个包含两个或多个类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)

Mar*_*ers 6

首先对元素进行分组,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.