目标:
执行代码
List<Part>
parts.GroupBy(b => new { b.PartName, b.PartId }).ToList();
结果应该是三个独特的部分
问题:
我尝试了一个查找解决方案,但最终它总是以下面的代码结束。
List<Part> parts = new List<Part>();
// Add parts to the list.
parts.Add(new Part() { PartName = "crank arm", PartId = 1234 });
parts.Add(new Part() { PartName = "crank arm", PartId = 1234 });
parts.Add(new Part() { PartName = "chain ring", PartId = 1334 });
parts.Add(new Part() { PartName = "regularseat", PartId = 1434 });
var ff = parts.GroupBy(b => new { b.PartName, b.PartId }).ToList();
谢谢!
答案 0 :(得分:1)
您缺少Select
声明:
List<Part> ff = parts
.GroupBy(b => new { b.PartName, b.PartId })
.Select(g => new Part
{
PartName = g.Key.PartName
PartId = g.Key.PartId
})
.ToList();
如果您的目标只是选择distinc Part
个对象,则GroupBy
可能会慢于Distinct
(请参阅this answer)。但你必须测试并看到自己。
如果要使用Distinct
,则必须通过实现IEqualityComparer接口来创建相等比较器。如果您选择了GetHashCode
,请务必选中JonSkeet's answer以获得良好Distinct
方法。
答案 1 :(得分:1)
您可以使用选择从每个组中选择第一个元素。然后你有一个平面的零件清单。
List<Part> parts = new List<Part>();
// Add parts to the list.
parts.Add(new Part() { PartName = "crank arm", PartId = 1234 });
parts.Add(new Part() { PartName = "crank arm", PartId = 1234 });
parts.Add(new Part() { PartName = "chain ring", PartId = 1334 });
parts.Add(new Part() { PartName = "regularseat", PartId = 1434 });
var ff = parts.GroupBy(b => new { b.PartName, b.PartId }).Select(group => group.First()).ToList();