簡體   English   中英

在LINQ中使用不重復,其中涉及> 1列

[英]Using distinct in LINQ where >1 column involved

我有一個記錄列表,其中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 
}

提前致謝。

最簡單的方法是GroupBy你想要的領域,決定要重復的哪些記錄:

myRecords.GroupBy(r=>r.VendorName)
         .Select(g => g.First());

您可以使用GroupBy 。這也將返回VendorId屬性,但我認為這不是問題。

myRecords.GroupBy(x => x.VendorName).Select(g => g.First());

我認為,使用morelinq的 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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM