Linq - 与字段不同必须返回所有字段

时间:2013-12-06 07:44:06

标签: c# linq

我正在处理一个文件,其中包含许多具有相同包的行,并且此文件上还有许多不同的包。我想选择不同的

column1 Model column3 column4 ... column12 - >所有这些列都是我的包(InformationFields)的内容

我希望使用Model列获取不同的包值。 (如果此行的信息字段中的模型已更改,则为新包)

我是Linq的新手,学习并在下面写了一行,返回我List<string>,其中包含我文件中的不同模型名称。但我希望List<InformationFields>

distinctPackages.AddRange(packages.Select(x => x.InformationFields.Model)
                                  .Distinct().ToList());

2 个答案:

答案 0 :(得分:5)

您正在将包投射到字符串中。这就是你最后有字符串列表的原因。为了拥有InformationFields,您需要按模型进行分组。然后,您可以从每个组中选择第一个包并将其投影到InformationFields

distinctPackages.AddRange(packages.GroupBy(p => p.InformationFields.Model)
                                  .Select(g => g.First().InformatioFields));

答案 1 :(得分:2)

您可以使用Distinct with equality comparer这样的内容

class PackagesEqualityComparer : IEqualityComparer<PackagesType>
{
    public bool Equals(PackagesType x, PackagesType y)
    {
        return x.InformationFields.Model == y.InformationFields.Model;
    }

    public int GetHashCode(PackagesType obj)
    {
        return obj.InformationFields.Model.GetHashCode();
    }
}

并像这样使用

distinctPackages.AddRange(packages.Distinct(new PackagesEqualityComparer()).ToList());