我在我的应用程序中多次使用相同的EF查询,所以我需要这样的东西:
private Expression<Func<Student, bool>> StudentIsActive()
{
return (x) => !x.IsDeleted && x.ItemsNumber > 0 && x.Sort > 0 && x.Status == StudentStatus.Active;
}
private Expression<Func<Student, bool>> StudentIsBusy()
{
return (x) => x.Mode == ModeType.Busy && x.Jobs.Count() > 0;
}
我想在我的多个查询中使用相同的逻辑,例如:
var students = context.Orders.Where(x => StudentIsActive() && StudentIsBusy()).ToList();
有人对此有任何想法吗?我怎样才能在表达式方法之间使用 AND 或 OR 逻辑?
答案 0 :(得分:0)
我不在家,所以我不能测试它购买我认为你可以将这些方法转移到IQueryable的扩展方法中:
public static class Ext
{
public static IQueryable<MainActivity.Student> StudentIsActive(this IQueryable<MainActivity.Student> @this)
{
return @this.Where(x => !x.IsDeleted && x.ItemsNumber > 0 && x.Sort > 0 && x.Status == StudentStatus.Active);
}
public static IQueryable<MainActivity.Student> IsBusy(this IQueryable<MainActivity.Student> @this)
{
return @this.Where(x.Mode == ModeType.Busy && x.Jobs.Count() > 0);
}
}
并使用它:
context.Orders.StudentIsActive().IsBusy().ToList();
答案 1 :(得分:0)
我通常发现And
/ Or
Expression
一起使用的最简单方法是使用LinqKit。一旦您引用了该库,就可以执行此操作:
//Or
var orPredicate = PredicateBuilder.Or(StudentIsActive(), StudentIsBusy());
var orders1 = context.Orders.AsExpandable().Where(orPredicate);
//And
var andPredicate = PredicateBuilder.And(StudentIsActive(), StudentIsBusy());
var orders2 = context.Orders.AsExpandable().Where(andPredicate);