代码之家  ›  专栏  ›  技术社区  ›  TalkingCode

如何使用distinct从LINQ查询中选择特定对象?

  •  1
  • TalkingCode  · 技术社区  · 14 年前

    我有一个包含两个或更多类代理对象的列表。

    名字=“A”

    优先级=0

    结果计数=100

    ;

    名字=“B”

    优先级=1

    结果计数=100

    ;

    两个对象的结果计数相同。在这种情况下,我只需要一个对象,而不需要两个或更多。我用一个带有distinct和一个定制比较器的linq查询完成了这个操作。

    IEnumerable<Agent> distinctResultsAgents = 
    (from agt in distinctUrlsAgents select agt).Distinct(comparerResultsCount);
    

    通过这个查询,我只从列表中得到一个对象,但我不知道是哪个对象。 但我不想要任何对象,我想要对象“B”,因为优先级高于对象“A”。 我该怎么做?

    我的自定义比较器非常简单,具有如下方法:

        public bool Equals(Agent x, Agent y)
        {
            if (x == null || y == null)
                return false;
    
            if (x.ResultCount == y.ResultCount)
                return true;
    
            return false;
        } 
    
    1 回复  |  直到 14 年前
        1
  •  6
  •   Mark Byers    14 年前

    首先将元素分组 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对象。