这里可以组合linq谓词吗?

这里可以组合linq谓词吗?,linq,entity-framework,Linq,Entity Framework,我将EF4.3与工作单元+存储库模式一起使用 我有一个方法作为其他一些方法的基础,下面是代码的外观 这是我的“基本”方法: public static IQueryable<Deal> FindActive() { var r = new ReadRepo<Deal>(Local.Items.Uow.Context); return r.Find(d => d.ActiveFrom <=

我将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);
    }
FindActive已经向
Find()
传递了一个谓词,因此需要将两者结合起来

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

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

public IQueryable FindActiveByStore(表达式谓词)
{
var r=新的ReadRepo(Local.Items.Uow.Context);
返回r.Find(d=>d.ActiveFrom DateTime.Now)
&&d.已出版)
.Where(谓语);
}

奇数。adding.Where(m=>m.AnotherField!=null)起作用,但.Where(谓词)不起作用)-提供语法…不包含Where@user1437135的定义,因为在泛型谓词(t)`和Deal之间存在混合。如果在函数的定义中用Deal替换T,它将起作用
    public static IQueryable<Deal> FindActiveByStore(int storeId)
    {
        Guard.Default(storeId, "storeId");
        return FindActive().Where(d => d.StoreId == storeId);
    }
FindActive(d => d.StoreId == storeId)
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);   
}