考虑这个LINQ查询。当给定的blobID.Key
出现多于一个时,会导致错误。
有没有办法在这里添加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)}
).ToDictionary(arg => arg.Key, arg => arg.Binder);
答案 0 :(得分:2)
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。
答案 1 :(得分:1)
使用ToLookup
。它是为此而制造的。
答案 2 :(得分:0)
是的,这将是字典的一个问题,因为密钥必须是唯一的。您可以考虑使用另一种结构来存储没有该要求的数据(列表),或者您可以尝试使用@Jason提到的Distinct(),或者可能按键分组,并创建该组的字典。这样,密钥是唯一的,您可以使用给定密钥存储所有条目的集合。
取决于您的要求。
HTH。