IQueryable を渡して他のメソッドに連鎖するメソッドがあります。カットサンプルはこちら。
public static IQueryable<Deal> Deals(this DbContext context)
{
Guard.ThrowIfNull(context, "context");
var r = new ReadRepo<Deal>(context);
return r.FindBy()
.Include("Deals_SitePost")
.Include("Deals_CommunityPost")
.Include("Deals_Preorder")
.Include("Deals_Product")
.Include("Deals_Sale")
.Include("Deals_VoucherCode")
.Include("DealSubcategories");
}
public static IQueryable<Deal> ByStore(this IQueryable<Deal> deals, int storeId)
{
return deals.Where(d => d.StoreId == storeId);
}
public static IQueryable<Deal> WhereFeatured(this IQueryable<Deal> deals)
{
return deals.Where(d => d.Deals_SitePost.IsNotNull() && d.Deals_SitePost.IsFeatured);
}
ご覧のとおり、スターター「Deals」と、クエリを拡張するために使用するいくつかの拡張メソッドがあります。
このシナリオでは、クエリステートメントの前にパフォーマンスの観点から !IQueryable.Any() をチェックして返すのが賢明ですか、それとも問題ではありませんか?