了解Distinct()如何与实体框架协同工作



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

例如,如果我有:

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

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

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

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

我通常希望在这样的查询中看到它

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

匿名类型有一个内置的属性比较器,因此内存中的实现和SQL转换是一致的。

最新更新