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

それをSQLに変換する方法がないため、HasValueがLINQtoEntitiesによって認識されるとは思いません。したがって、この場合、L2EはHasValueを評価する前にクエリを実行する必要があると思います。私はこれまでこの特定の行動を見たことがありません。null可能性テストを表現する別の方法を見つける必要があると思います。そして、SQLを見たいと思います。

ここに1つの興味深いアイデアがあります: http ://social.msdn.microsoft.com/Forums/en/csharplanguage/thread/56484ed7-9664-44f4-84a0-69da3901c817

nullablesの周りのLINQにはあらゆる種類の奇妙な動作があるため、結果に本当に注意を払う必要があります-> http://msdn.microsoft.com/en-us/library/bb738687.aspx

h番目のジュリー

于 2012-04-22T17:24:25.260 に答える