这里可以组合linq谓词吗?
我将EF4.3与工作单元+存储库模式一起使用 我有一个方法作为其他一些方法的基础,下面是代码的外观 这是我的“基本”方法:这里可以组合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 <=
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);
}