我正在处理一个文件,其中包含许多具有相同包的行,并且此文件上还有许多不同的包。我想选择不同的
column1 Model column3 column4 ... column12 - >所有这些列都是我的包(InformationFields)的内容
我希望使用Model列获取不同的包值。 (如果此行的信息字段中的模型已更改,则为新包)
我是Linq的新手,学习并在下面写了一行,返回我List<string>
,其中包含我文件中的不同模型名称。但我希望List<InformationFields>
。
distinctPackages.AddRange(packages.Select(x => x.InformationFields.Model)
.Distinct().ToList());
答案 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());