我正在使用具有工作单元 + 存储库模式的 EF4.3。
我有一个方法可以作为其他一些方法的基础,下面是代码的外观。
这是我的“基本”方法:
public static IQueryable<Deal> FindActive()
{
var r = new ReadRepo<Deal>(Local.Items.Uow.Context);
return r.Find(d =>
d.ActiveFrom <= DateTime.Now &&
(d.ActiveUntilComputed == null || d.ActiveUntilComputed > DateTime.Now) &&
d.Published);
}
这是调用基本方法的方法之一:
public static IQueryable<Deal> FindActiveByStore(int storeId)
{
Guard.Default(storeId, "storeId");
return FindActive().Where(d => d.StoreId == storeId);
}
正如您在 中看到的FindActiveByStore
,我首先调用FindActive
,然后是链式调用Find()
。FindActive 后跟 aWhere()
添加辅助谓词(请原谅术语)。
我想知道是否可以将谓词传递给FindActive
而不是使用 a Where()
,事实上它是否会在性能方面有所不同。
像这样:
FindActive(d => d.StoreId == storeId)
FindActive 已经将谓词传递给,Find()
因此它需要将两者结合起来。
我猜我得到的答案在努力或性能方面将是“不值得”的,但我想我还是会问专家。