[英]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.