簡體   English   中英

選擇具有匿名類型的Linq中的Distinct

[英]Select Distinct in Linq with anonymous type

考慮此LINQ查詢。 當給定的blobID.Key出現多個時,將導致錯誤。

有什么方法可以在此處添加與眾不同的內容,以安全的方式將其轉換為字典嗎?

var temp = (from blobID in blobIds
            join blob in blobs on blobID.Value.HashKey 
            equals blob.HashKey
            select new { blobID.Key,  
                          Binder = Load(blob)}
           ).ToDictionary(arg => arg.Key, arg => arg.Binder);

Object.Equals被匿名類覆蓋,因此您可以使用Enumerable.Distinct

var temp = (from blobID in blobIds
            join blob in blobs on blobID.Value.HashKey equals blob.HashKey
            select new {
                blobID.Key,
                Binder = Load(blob)
            }
           ).Distinct()
            .ToDictionary(arg => arg.Key, arg => arg.Binder);

在這里, Distinct將為匿名類使用Default相等比較器。 匿名類的Default相等比較器使用Object.Equals ,如果所有屬性都相等,則重寫該對象以返回true。

使用ToLookup 這是為此而做的。

是的,因為密鑰必須是唯一的,所以字典將是一個問題。 您可以考慮使用不具有此要求的另一種結構來存儲數據(列表),或者可以嘗試使用@Jason提到的Distinct(),或按鍵分組,然后創建該組的字典。 這樣,密鑰是唯一的,並且您將使用該給定密鑰存儲所有條目的集合。

取決於您的要求。

HTH。

暫無
暫無

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

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