【发布时间】:2012-08-27 09:04:53
【问题描述】:
我有一些方法可以链接到其他方法,传递 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”和几个我用来扩展查询的扩展方法。
在这种情况下,在查询语句之前检查并返回 where !IQueryable.Any() 是明智之举,还是没关系?
【问题讨论】:
-
性能问题....最好是与
Stopwatch或类似的方式进行检查并将其作为答案发布, -
实际上不需要检查'Any()'。但是,您应该检查“IQueryable
”是否为空! -
性能优化的前三条规则:measure,measure,measure。
-
@BigYellowCactus - 我可以对其进行测试,但它可能会在不同的情况下给出不同的结果 - 我正在寻找“它是更好的做法”的答案