【问题标题】:How to find duplicate items based on multiple values using LINQ?如何使用 LINQ 基于多个值查找重复项?
【发布时间】:2012-10-13 13:14:55
【问题描述】:

假设我有以下课程:

public class Test{
    public string Length { get; set; }
    public string Width { get; set; }
    public string Height { get; set; }
    public int Count { get; set; }
    public string Label { get; set; }
}

我想找到长度和标签值相同的项目,并计算每个项目的数量。到目前为止,我的代码如下所示:

var dups = testlist.GroupBy(i => new { i.Length, i.Label })
                   .Where(g => g.Count() >= 1)
                   .Select(g => new { Length = g.Key.Length, Label = g.Key.Label, 
                                      Count = g.Count() });

但问题是,var 中的对象不再具有 width 或 height 属性(它们在 g.Key 中不存在)。无论如何在结果中保存其他属性的同时根据两个属性查找重复项?

【问题讨论】:

  • 由于每个组中可能有多个具有不同宽度和高度的项目,您想要哪些值
  • 就像在 SQL 中一样,您必须在分组后选择要使用的那些。尝试 g.First() 获取分组中的第一个 Width 或 Height。
  • (同样Where 子句是多余的——如果没有给定标签和高度的项目,那么无论如何都不会有它们的组。)
  • 那么你想要一个所有宽度/高度的列表/集合,你想要平均值、第一个、总和、最大值、最后一个最小值还是什么?

标签: c# linq list duplicates


【解决方案1】:

之后

testList
  .GroupBy(i => new { i.Length, i.Label })
  .Where(g => g.Count() >= 1)

你实际上有一个IEnumerable<IEnumerable<Test>>。这是一份受骗者名单。你还想要什么?

【讨论】:

  • +1 感谢您提醒我编译器对匿名类型的支持。
  • 对不起,我想我问的问题没有经过深思熟虑。不过感谢您的回答。
猜你喜欢
  • 2011-08-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-30
  • 1970-01-01
  • 2011-12-30
  • 1970-01-01
  • 1970-01-01
  • 2013-03-22
相关资源
最近更新 更多