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);