【问题标题】:Distinct in Linq queryLinq 查询中的不同
【发布时间】:2012-07-11 11:28:32
【问题描述】:

我怎样才能使这个 Distinct 工作:

   var blockIdMap = (from panelEntry in panelEntries
                          select new {panelEntry.BlockNo, panelEntry.BlockID})
                          .Distinct()
                          .ToDictionary(mc => mc.BlockNo , mc => mc.BlockID);

我只需要 BlockNo 的唯一条目及其 BlockId,因为我将它们输入到 Dictionary 并且 BlockNo 应该是唯一的。 我只想拿第一个。

【问题讨论】:

  • 你总是可以GroupBy BlockNo 然后选择First BlockID。更改Distinct 的唯一方法是使用IEqualityComparer<T> 或使用实现IEquatable<T> 并覆盖GetHashCode 的类。你不能用匿名类型来做前者,它们有自己的实现,后者被锁定。
  • @Jamiec 我知道,我修改了我的评论,声明您不能更改实施,因为我的初稿不准确。默认实现将考虑所有属性,而不仅仅是BlockNo

标签: c# linq


【解决方案1】:
var blockIdMap = panelEntries.GroupBy(pe => pe.BlockNo)
            .ToDictionary(k => k.Key, v => v.First())

【讨论】:

    【解决方案2】:

    在这种情况下,您的 linq 查询不起作用,因为 .Distinct() 方法等于 panelEntry.BlockNopanelEntry.BlockID 而不仅仅是 panelEntry.BlockNo。因此可以使用MoreLinq.DistinctBy() 方法:

    var blockIdMap = (from panelEntry in panelEntries
                     select new {panelEntry.BlockNo, panelEntry.BlockID})
                     .DistinctBy(mc => mc.BlockNo)
                     .ToDictionary(mc => mc.BlockNo , mc => mc.BlockID);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多