データソースを取得するデータベースコンテキストがあります。Entity Frameworkクエリデコレータがすぐにクエリを送信します
public class EFDataSource : DbContext
{
public IDbSet<Product> Products { get; set; }
}
私は、製品のコード側に非常に多くのクエリ基準を持っています。
var data = new EFDataSource().Products
.Where(criteria1)
.Where(criteria1)
.Where(...)
このクエリロジックをクラスで分割する必要があります。
var query1 = new Query(); // Sends to database
var query2 = new FilterByUser(query1,"username"); // Sends to database
if(somethingHappened)
var query3 = new FilterBySomething(query2); // Sends to database
public class Query : IQuery<Product>
{
public IQueryable<Product> Data
{
get { return new EFDataSource().Products; }
}
}
public class FilterByUser: IQuery<Product>
{
private readonly string username;
private readonly IQuery<Product> query;
public FilterByUser(IQuery<Product> query, string username)
{
this.username = username;
this.query = query;
}
public IQueryable<Product> Data
{
get { return query.Data.Where(s => s.CreatedBy == username); }
}
}
ただし、これらのすべての手順でデータベースにクエリが送信されます。しかし、私は1つだけのクエリを送信したい。
あなたのフィルタメソッド内のコードは何ですか? –
投稿を更新しました – barteloma
デバッガ体験のようなサウンドです。 'IQueryable'を実行しないと(評価すると、いくつかのデバッガウィンドウで列挙型を展開する)データベースに送られる方法はありません。 –