了解 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 翻译一致。
我明白 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 翻译一致。