【问题标题】:EF Core 2 GroupBy Count predicate ignoredEF Core 2 GroupBy Count 谓词被忽略
【发布时间】:2018-05-03 17:02:37
【问题描述】:

我目前有以下代码:

var result = query<Items>()
            .Where(x => x.Id == someId)
            .SelectMany(x => x.SubItems)
            .GroupBy(x => x.SubItemId)
            .Select(x => new ItemModel
            {   
                SubItemId = x.Key,
                SpecialItemCount = x.Where(y => y.IsSpecial == false).Count(),
            })
            .ToList()...

当我调用“Count()”时,它会查询所有子项计数,而忽略我的谓词“y.IsSpecial”。我在 EF Core 2.0.X 和 EF Core 2.1 preview 2 上尝试过,这可能是一个错误吗?

【问题讨论】:

  • 我相信 GroupBy 尚未在 EF Core 中实现,因此这会将所有表拖到内存中并在本地分组。
  • 2.1支持,控制台无警告
  • 是的,但不确定它的效果如何。请注意,您也可以将计数写为x.Count(y =&gt; !y.IsSpecial)
  • 有时间去看看。为了清楚起见,它不会发生在 2.0.2 上,对吧?仅在 2.1 预览版 2 上?
  • 这是 2.1,preview-2 最终版本。不幸的是,我不记得它是哪个确切版本(2.0.x)

标签: c# asp.net ef-core-2.0


【解决方案1】:

EF Core 3.0 也存在同样的问题。似乎是 EF 中的错误 - 您可以使用

SpecialItemCount = x.Sum(y => y.IsSpecial ? 0 : 1)

而不是

SpecialItemCount = x.Count(y => y.IsSpecial == false)

【讨论】:

    【解决方案2】:

    您需要升级到支持 GroupBy 的 EF Core 2.1:https://docs.microsoft.com/en-us/ef/core/what-is-new/ef-core-2.1

    【讨论】:

      猜你喜欢
      • 2021-06-21
      • 1970-01-01
      • 1970-01-01
      • 2019-01-14
      • 2021-08-05
      • 1970-01-01
      • 2021-05-25
      • 2021-12-26
      • 2018-10-22
      相关资源
      最近更新 更多