我有一个方法可以从我的数据库中的View中获取整个数据:
public IQueryable<vw_FullWebIgnoringApprovalStatus> GetAllFullWebIgnoringApprovalStatus()
{
IQueryable<vw_FullWebIgnoringApprovalStatus> query =
Context.vw_FullWebIgnoringApprovalStatus;
return query;
}
当我执行以下方法时,它会立即执行不应该执行的查询:
var model = _repo.GetAllFullWebIgnoringApprovalStatus()
.Where(x =>
(!reid.HasValue && !destid.HasValue && !coid.HasValue) ||
(reid.HasValue && x.Reid == reid.Value) ||
(destid.HasValue && x.Destid == destid.Value) ||
(coid.HasValue && x.Coid == coid.Value)
);
它应该延迟加载查询而它没有。它与视图有关吗?我正在使用EntityFramework.4.3.1。
答案 0 :(得分:2)
我不相信LINQ to Entities会识别HasValue因为无法将其转换为SQL。因此,我认为在这种情况下,L2E必须先执行查询才能评估HasValue。我之前没有见过这种特殊的行为。我需要找到另一种表达你的可空性测试的方法。我有兴趣看到SQL。
LINQ周围存在各种奇怪的行为,所以你必须真正关注结果 - &gt; http://msdn.microsoft.com/en-us/library/bb738687.aspx
HTH 朱莉