【发布时间】: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