0

我正在使用具有工作单元 + 存储库模式的 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()因此它需要将两者结合起来。

我猜我得到的答案在努力或性能方面将是“不值得”的,但我想我还是会问专家。

4

1 回答 1

0

您可以使用此代码(减少代码行数)

public IQueryable<Deal> FindActiveByStore(Expression<Func<Deal,bool>> predicate)
{
  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)

             .Where(predicate);   
}
于 2012-09-07T07:48:54.187 回答