我有一个记录列表,其中3个属性是
VendorId
VendorName
VendorDesc
同一供应商可能有多个实例。
我想要做的是使用VenderDesc属性检索“VendorNames”的“不同”列表。
返回一个属性很好,即
var myVendorNameList = myRecords.Select(r=>r.VendorName).Distinct();
但是我希望将VendorDesc添加到此列表中,之后我将使用foreach输出(Razor View)内容,即
foreach (var item in myVendors)
{
Name: @item.VendorName
Desc: @item.VendorDesc
}
提前致谢。
答案 0 :(得分:5)
最简单的方法是GroupBy
您想要的字段,并决定您想要的重复记录:
myRecords.GroupBy(r=>r.VendorName)
.Select(g => g.First());
答案 1 :(得分:2)
您可以使用GroupBy
。这也会返回VendorId
属性,但我认为这不是问题。
myRecords.GroupBy(x => x.VendorName).Select(g => g.First());
答案 2 :(得分:2)
我认为,使用morelinq's DistinctBy(如提到的LB)或创建自己的那个将更具可读性
public static IEnumerable<T> DistinctBy<T, TKey>(this IEnumerable<T> source,
Func<T, TKey> keySelector)
{
HashSet<TKey> keys = new HashSet<TKey>();
return source.Where(x => keys.Add(keySelector(x)));
}
您现在可以将其用作
myVendorNameList = myRecords.DistinctBy(r=>r.VendorName);