我有一个非常奇怪的问题,我的实体框架查询没有正确枚举。
我正在使用的SQL Server表有一个带有Sku字段的表,该列是“distinct”。它不是密钥,但它不包含任何重复值。使用where
,distinct
和group by
cluases的实际SQL,我已经证实了这一点。
然而,当我这样做时:
// Not good
foreach(var product in dc.Products)
或
// Not good
foreach(var product in dc.Products.ToList())
或
// Not good
foreach(var product in dc.Products.OrderBy(p => p.Sku))
返回的前两个对象是相同的!!!
第三项技术上是表中的第二项,但第四项又是表中的第一项!!!
我找到的唯一解决方案是使用Distinct扩展方法,在这种情况下不应该做任何事情:
// Good
foreach(var product in dc.Products.ToList().Distinct())
另一个奇怪的事情是结果查询的计数是相同的!!! 因此,无论结果可枚举是否具有正确的结果或重复,我总是得到行数在实际的表中! (不,我在任何地方都没有限制条款。)
什么可能导致这种情况!?!?!?
答案 0 :(得分:1)
确保您拥有该表的主键。