使用数据类型列表<part>检索结果

时间:2016-09-09 11:07:54

标签: c# linq

目标:
执行代码

后,将变量ff检索为数据类型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();

谢谢!

2 个答案:

答案 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();