了解 Distinct() 如何与 Entity Framework 一起工作

Understanding how Distinct() works with Entity Framework

我明白 Distinct() returns 通过使用默认的相等比较器来比较值来区分序列中的不同元素。 但我不太明白这在 Entity Framework.

中是如何工作的

例如,如果我有:

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

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

在 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 翻译一致。