C# Linq查询中的Distinct
我如何使这项工作与众不同:C# Linq查询中的Distinct,c#,linq,C#,Linq,我如何使这项工作与众不同: var blockIdMap = (from panelEntry in panelEntries select new {panelEntry.BlockNo, panelEntry.BlockID}) .Distinct() .ToDictionary(mc => mc.BlockNo , mc =
var blockIdMap = (from panelEntry in panelEntries
select new {panelEntry.BlockNo, panelEntry.BlockID})
.Distinct()
.ToDictionary(mc => mc.BlockNo , mc => mc.BlockID);
我只需要BlockNo的唯一条目和它的BlockId,因为我将它们输入到字典中,BlockNo应该是唯一的。
我只想取第一个。在这种情况下,您的linq查询不起作用,因为方法等于
panelEntry.BlockNo
和panelEntry.BlockID
,而不仅仅是panelEntry.BlockNo
。因此,可以使用解决方案,方法.DistinctBy()
:
var blockIdMap = panelEntries.GroupBy(pe => pe.BlockNo)
.ToDictionary(k => k.Key, v => v.First())
您可以始终通过
GroupBy
BlockNo
,然后首先选择
BlockID
。更改Distinct
的唯一方法是使用IEqualityComparer
或使用实现IEquatable
并重写GetHashCode
的类。你不能用匿名类型做前者,后者有自己的实现,后者被锁定。@AdamHouldsworth-@jamice我知道,我修改了我的评论,声明你不能更改实现,因为我的第一稿不准确。默认实现将考虑所有属性,而不仅仅是BlockNo
。
var blockIdMap = (from panelEntry in panelEntries
select new {panelEntry.BlockNo, panelEntry.BlockID})
.DistinctBy(mc => mc.BlockNo)
.ToDictionary(mc => mc.BlockNo , mc => mc.BlockID);