我在单元测试的几个地方碰到了这个问题。我使用左外连接写了这样的查询:
from user in db.SSUserInfo
from purchase in db.Purchases.Where(p => p.UserId == user.Id && p.PackageGroupId == Id).DefaultIfEmpty()
where userIdList.contains(user.
select new {
purchaseId = (int?)purchase.Id
}
这在查询数据库时工作正常,即使如果用户不存在购买,购买也将为空。但是,当查询内存列表(用于单元测试)时,如果购买返回为null,则会因NULL引用异常而崩溃。
我可以通过执行以下操作让内存版本崩溃:
purchaseId = (int?)((purchase != null) ? purchase.Id : null)
但是这会导致发送到数据库的SQL膨胀。
有没有人知道如何让内存中的查询不会在null上崩溃,同时保持SQL的效率?
EF 6.2.0和.Net 4.6.1正在发生这种情况。它也发生在早期版本上。