私が気に入っているパターンの 1 つ (認識されているパターンかどうかはわかりません) は、DBContext に拡張メソッドを作成して、クエリを含むクラスをロードできるようにすることです。これは、クエリをある程度区分化できることを意味します。
public static XTypeQueries XTypeQueries(this EntityModel db)
{
return new XTypeQueries(db);
}
そして別ファイルで
public class XTypeQueries : QueryLibrary
{
public XTypeQueries (EntityModel db) : base(db) { }
public IQueryable<Object> DoSomeQuery()
{
return from ... in this.db...
select ...;
}
}
拡張元のクエリライブラリオブジェクトは単純です
public abstract class QueryLibrary
{
protected readonly EntityModel db;
protected QueryLibrary(EntityModel db)
{
this.db = db;
}
}
これの結果は、あなたができることです
var query = new EntityModel().XTypeQueries.DoSomeQuery();
メソッドを Queryable として保持するようにしています。これにより、メソッドが呼び出されたときに、多くの無駄な処理をせずに必要なだけ具体的にすることができます。これで、グループ化されたクエリのライブラリができましたが、Linq をインラインで記述したのと同じように動作します。