私はlinqとジェネリックで実験しています。今のところ、私はちょうど与えられた型のすべてのレコードを返すGetAllメソッドを実装しました。Linqからエンティティ、ジェネリックとプリコンパイルされたクエリ
class BaseBL<T> where T : class
{
public IList<T> GetAll()
{
using (TestObjectContext entities = new TestObjectContext(...))
{
var result = from obj in entities.CreateObjectSet<T>() select obj;
return result.ToList();
}
}
}
これは問題なく動作します。次に、私は、クエリをプリコンパイルしたいと思います:
ここclass BaseBL<T> where T : class
{
private readonly Func<ObjectContext, IQueryable<T>> cqGetAll =
CompiledQuery.Compile<ObjectContext, IQueryable<T>>(
(ctx) => from obj in ctx.CreateObjectSet<T>() select obj);
public IList<T> GetAll()
{
using (TestObjectContext entities = new TestObjectContext(...))
{
var result = cqGetAll.Invoke(entities);
return result.ToList();
}
}
}
、私は以下の取得:
base {System.Exception} = {"LINQ to Entities does not recognize the method
'System.Data.Objects.ObjectSet`1[admin_model.TestEntity] CreateObjectSet[TestEntity]()'
method, and this method cannot be translated into a store expression."}
これに伴う問題は何ですか?私は問題がプリコンパイルされたクエリの実行の結果であると思うが、私はなぜfanthomすることができない。
なぜコンパイルされたクエリが必要だと思いますか?あなたはそれを必要としません。 –
エラーには関係ありません。しかし、もしうまくいけば、 'cqGetAll'を' static'フィールドにしたくなります。 –
@Jeff Mercado - この場合は必要ありませんが、もっと複雑なクエリでこれを展開する予定です。 – loodakrawa