【发布时间】: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 中。请注意,这将非常缓慢。
标签: linq entity-framework linqpad outer-join