gpt4 book ai didi

c# - 如果未从 DistinctBy 中找到重复项,则返回 0

转载 作者:太空狗 更新时间:2023-10-30 01:30:56 24 4
gpt4 key购买 nike

我认为这会很简单,但不幸的是我找不到我正在寻找的答案。我想要实现的是,如果它们是重复的,则返回一个独特的结果列表,否则返回 0 而不是单个项目。到目前为止我的代码是,第一个 distinct by 应该返回所有不同的行,然后第二个将它们进一步向下过滤:

List<Server> serversWithBothAffinity = filteredServers
.DistinctBy(x => new { x.ServerVersion, x.ServerName, x.ServerSlot, x.ServerAffinity})
.DistinctBy(x => new {x.ServerVersion, x.ServerName, x.ServerSlot});

这个问题是,当我在列表中只有 1 个没有重复的项目时 - 当我希望它返回 0 时,这段代码仍然返回 1。

快乐的一天场景,当一切如我所愿时,给定以下条件:

{1.0, "ServerName1", "ServerSlotA", "Europe"}
{1.0, "ServerName1", "ServerSlotA", "Pacific"}
{1.0, "ServerName2", "ServerSlotB", "Europe"}
{1.0, "ServerName2", "ServerSlotA", "Pacific"}

结果如预期的那样正确:

{1.0, "ServerName1", "ServerSlotA"}

问题场景,给出以下内容:

{1.0, "ServerName1", "ServerSlotA", "Europe"}

结果不正确:

{1.0, "ServerName1", "ServerSlotA"}

预期结果:

请帮忙。

最佳答案

这里不需要 MoreLINQ:

List<Server> serversWithBothAffinity = filteredServers
.GroupBy(x => new { x.ServerVersion, x.ServerName, x.ServerSlot})
.Where(g => 1 < g.Count())
.Select(g => g.First())
.ToList();

DistinctBy 的问题在于,在应用它之后,您无法判断每个“组”中有多少项 - 它会生成单个项


您还可以使用漂亮的查询语法(好吧,ToList 部分除外)

var serversWithBothAffinity = 
from s in filteredServers
group s by new { s.ServerVersion, s.ServerName, s.ServerSlot} into g
where 1 < g.Count()
select g.First();

关于c# - 如果未从 DistinctBy 中找到重复项,则返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42150511/

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