gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 19:34:17 25 4
gpt4 key购买 nike

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

名称 = "A"

优先级 = 0

结果计数 = 100

;

名称 = "B"

优先级 = 1

结果计数 = 100

;

两个对象具有相同的 ResultCount。在那种情况下,我只需要一个对象而不是两个或更多。我使用带有 Distinct 和自定义比较器的 Linq 查询来完成此操作。

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;
}

最佳答案

首先按 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。

关于c# - 如何使用 Distinct 从 Linq 查询中选择特定对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2865111/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com