【问题标题】:Understanding how Distinct() works with Entity Framework了解 Distinct() 如何与实体框架一起工作
【发布时间】:2021-05-16 17:45:19
【问题描述】:

我知道Distinct() 通过使用默认的相等比较器来比较值,从序列中返回不同的元素。但我不太明白它在实体框架中是如何工作的。

例如,如果我有:

return dbContext.Products.Select(p => p.Dealer).Distinct();

生成的 SQL 将如何确定 Dealer 是否等于另一个 Dealer?它是比较所有列,还是做其他事情?

【问题讨论】:

标签: c# entity-framework linq distinct


【解决方案1】:

在 LINQ Distinct() 中映射到SELECT DISTINCT Col1, Col2, Col3,....

这在语义上与 IEnumerable.Distinct() 不同。但是其他选项根本没用,SQL 中的这种查询模式偶尔有用。

我通常希望在类似的查询中看到它

var col = db.Products.Select(p => new {p.Color, p.Size, p.Material}).Distinct();

并且匿名类型有一个内置的属性比较器,所以内存实现和 SQL 转换是一致的。

【讨论】:

  • 谢谢。但是这种将问题转移到 SQL 上。在您的示例中,是否所有三个属性(ColorSizeMaterial)都需要在 Distinct() 确定两个实例相同之前匹配?
  • 是的,这就是SELECT DISTINCT 在 SQL 中的意思。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-23
  • 2011-05-01
  • 2017-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多