实体框架计数差异

时间:2012-01-21 02:24:17

标签: sql entity-framework c#-4.0 entity-framework-4

我对Entity Framework(4)有点新鲜。我一直在追踪我们软件中的一个错误,我已经把它钉在了下面的怪癖中。我很好奇是否有人可以帮我解释为什么这两个Counts(dataCount和data2Count)会根据我调用它们的方式而有所不同。 data2Count是正确的,实际上与我在SQL中的内容相匹配。

        using (var context = new Entities(ConnectionString))
        {
            var startDateTime = DateTime.Parse("10/1/2011");
            var endDateTime = DateTime.Parse("12/31/2011 23:59");

            var query = from data in context.vDATA
                        where data.ParentId == parentId &&
                        data.TimeStamp >= startDateTime &&
                        data.TimeStamp <= endDateTime
                        select data;

            var data = query.ToList();
            var dataCount = data.Where(x => x.TestType == 20).Count();
            //dataCount is 162

            var data2 = query.Where(x => x.TestType == 20);
            var data2Count = data2.Count();
            //data2Count is 198
        }

感谢。

2 个答案:

答案 0 :(得分:1)

好吧,我想我发现并修复了发生的事情 - 虽然我不确定我能否在内部解释EF如何处理它......我在这里发现了一篇文章:Entity framework result discrepancy for a database views听起来像是一个类似的问题。我在SQL中的数据有几个记录,其字段大致相同。唯一的区别是TestType。但它没有被标记为关键的一部分。简单地扩展键以包含此字段会导致Counts正确匹配。

答案 1 :(得分:0)

如何设置parentId?它是在这个代码片段运行的循环之外声明的变量吗?如果是这样,由于关闭问题,这可能会起到时髦的作用。 This other question为您提供了有关如何解决关闭问题的大量信息。