2

私がこのような方法を持っているとしましょう:

IQueryable<MyFlatObject> GetMyFlatObjects()
{
    using (var context = new MyEntities())
    {
        return context.MyEntities.Select(x => new MyFlatObject()
                                                  {
                                                     Property1 = x.PropertyA,
                                                     Property2 = x.PropertyB,
                                                     Property3 = x.PropertyC,
                                                  });
    }
}

今私が呼ぶ場合:

MyService.GetMyFlatObjects().Where(x => x.Property1 == "test");

サニティーチェック。このフィルターはデータベースストアに伝達されませんが(エンティティをクエリした場合のように)、代わりにすべての結果を取得し、LINQ-to-objectsを使用してフィルター処理します。右?

4

1 に答える 1

4

私は、それは正しくないと思います。IQueryable<T>まず、を新しいに拡張するだけなので、何もクエリしませんIQueryable<T>。クエリを実行するなどの呼び出しを行うと、ブロックToList()の最後にコンテキストが既に配置されているため、例外が発生します。usingコンテキストを破棄しない場合、WhereフィルターはSQLに変換され、データベースで実行されます。の前にを適用Whereした場合と同じように動作すると思います。PropertyA Select

于 2012-07-16T22:20:41.277 に答える