LINQ/LinqPad:相同的查询不同的结果

Posted

技术标签:

【中文标题】LINQ/LinqPad:相同的查询不同的结果【英文标题】:LINQ/LinqPad: same query different results 【发布时间】:2012-06-22 02:42:00 【问题描述】:

因此,我们将完全相同的查询从 LinqPad 复制并粘贴到我们的 EF 4.3 应用程序中,指向完全相同的数据库并获得不同的结果。在 LinqPad 中,我们返回 2 条记录。在我们的应用程序中,我们引发了一个错误“未将对象引用设置为对象的实例。”

        var Shippings = shippingRepository.All.ToArray();
        var SalesOrderHeaders = salesOrderHeaderRepository.All.ToArray();
        var Customers = customerRepository.All.ToArray();
        var Stores = storeRepository.All.ToArray();
        var Departments = departmentRepository.All.ToArray();

        var toShip = from sh in Shippings
                     join h in SalesOrderHeaders on sh.OrderId equals h.SalesOrderHeaderId
                     join c in Customers on h.CustomerId equals c.CustomerId
                     join st in Stores on h.StoreId equals st.StoreId
                     join d in Departments on h.DepartmentId equals d.DepartmentId into outer
                     from o in outer.DefaultIfEmpty()
                     select new 
                     
                        OrderId = sh.OrderId,
                        CustomerName = c.Name,
                        StoreName = st.Name,
                        DepartmentName = (o.Name == null) ? o.Name : "None",
                        DeliveryDate = h.DeliveryDateTime
                     ;

在应用程序代码中,当我们删除外连接(以添加部门)及其关联字段时,查询返回与 LinqPad 中相同的 2 条记录。

是否有人对如何修复此功能有任何见解?

【问题讨论】:

我从未使用过 LINQPAd,所以这是在黑暗中拍摄,但 LinqPad 是否有可能使用 Linq to sql 而不是 Linq to Entities? 你是用自己的datacontext,还是LinqPad生成的? 需要注意的一点是,在每个存储库上调用ToArray 意味着您的所有连接都发生在客户端,而不是在 SQL Server 中。请注意,这将非常缓慢。 【参考方案1】:

在 linqpad 中单击“添加连接”并从程序集中选择数据上下文,例如 您可以根据您的场景选择 Entity Framework datacontext 或 Entity Framework BDContext with POCO。单击下一步并提供程序集的路径以及连接字符串,您就可以开始了。

【讨论】:

【参考方案2】:

在 LINQPad 中,您实际上是在查询您的实体模型吗?如果您不是,请查看this link。刚开始时我遇到了类似的问题,但没有意识到我之前已经设置了默认的 LINQ to SQL 连接并且正在查询它。

【讨论】:

以上是关于LINQ/LinqPad:相同的查询不同的结果的主要内容,如果未能解决你的问题,请参考以下文章

不同 Cassandra 节点中相同查询的不同结果

相同的mysql查询在phpmyadmin的不同时间给出不同的结果

Doctrine ORM,两个不同的查询产生相同的结果集

两个不同的查询返回相同的对象 Spring Boot JPA

与相同的逻辑条件查询相比,HQL 查询返回不同的结果

Laravel QueryBuilder - 相同查询的 `where()` 和 `whereRaw()` 结果不同