アトミックコンテキストを持つC#リポジトリを作成しようとしていますが、閉鎖の使用には完璧な状況だと感じていますが、 C#。私は、リポジトリ内の主な方法としてこれを持っている:閉鎖メソッドとしての動的LINQクエリの作成
...
protected virtual IQueryable<T> AsQueryable()
{
return _context.ObjectSet<T>().AsQueryable();
}
...
。一方、私のようなメソッドを持つクラスを派生しています
...
public IQueryable<Arc> ByRun(Run run)
{
IQueryable<Arc> query = from o in AsQueryable()
from r in o.Runs
where r.Id == run.Id
select o;
return query;
}
...
と私はIEnumerableをを返すために、私のクエリ方法を変更すると、すぐに処分したいです
...
protected virtual IEnumerable<T> AsEnumerable()
{
using (IContextUnitOfWork unitOfWork = new EFUnitOfWork())
{
return unitOfWork.ObjectSet<T>().ToList();
}
}
...
問題、当然のことながら、文脈が配置されると、結果のIEnumerableをセットにLINQを呼び出すと失敗することです:文脈で、これは(のようなもの)を使用します。したがって、私はByRun()メソッドをバンドルして、それをクロージャとして使用するAsEnumerable()に渡すべきだと考えました。
私の元の言語スタイルではありませんが、私はRubyでクロージャーを学びました。 AsEnumerableメソッドは、コンテキストを開く渡された操作を実行し、戻ってくる
ByRun(Run run)
AsEnumerable do |query|
from o in query
from r in o.Runs
where r.Id == run.Id
select o;
end
end
:そこに、私がやろうとしていることは、この混同擬似コードのようになります。私は構文を理解するとこれを行うことができると確信しているので、私はこのように実装したいAsEnumerableメソッドとByRunメソッドを探しています。
、私はLINQとクロージャを使用して実装されたIQueryableインターフェイスには多くの方法が、私はちょうどにコードを取得することができないことを実現します例を参照してください。 – JohnMetta