2

我有一种方法可以从数据库中的视图中获取全部数据:

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。

4

1 回答 1

3

我不相信 LINQ to Entities 可以识别 HasValue,因为无法将其转换为 SQL。因此,我认为在这种情况下,L2E 必须先执行查询,然后才能评估 HasValue。我以前从未见过这种特殊行为。我认为您需要找到另一种方式来表达您的可空性测试。我很想看看 SQL。

这是一个有趣的想法: http ://social.msdn.microsoft.com/Forums/en/csharplanguage/thread/56484ed7-9664-44f4-84a0-69da3901c817

LINQ 围绕 nullables 有各种奇怪的行为,所以你必须真正注意结果-> http://msdn.microsoft.com/en-us/library/bb738687.aspx

朱莉

于 2012-04-22T17:24:25.260 回答