我如何将一个简单的表达式附加到 IQueryable
How do i append a simple expression onto IQueryable
我有以下方法:
public List<Customer> SearchTest(string city, int skip, int take)
{
EcomContext db = new EcomContext();
var results = db.Customers.Where(n => n.City == city).OrdeyBy(n => n.Name).Skip(skip).Take(10);
results = AddDeleteCheck<Customer>(results);
return results.ToList()
}
以及这个可重复使用的方法:
private IQueryable<T> AddArchivedCheck<T>(IQueryable<T> data)
{
var parameter = Expression.Parameter(typeof(T));
var e1 = Expression.Equal(Expression.Property(parameter, "Archived"), Expression.Constant(false));
var e2 = data.Expression;
var e3 = Expression.Lambda<Func<T, bool>>(Expression.AndAlso(e1, e2), parameter);
return data.Where(e3);
}
我希望能够从许多不同的函数中调用此方法,因此我将其设为通用。它应该从 IQueryable 对象中获取表达式并对此添加检查 (Archived == false)。
我收到这个错误:
二元运算符 AndAlso 没有为类型 'System.Boolean' 和 'System.Linq.IQueryable` [Ecom.Customer]
定义
比你写的更简单:
private static IQueryable<T> AddArchivedCheck<T>(IQueryable<T> data)
{
var parameter = Expression.Parameter(typeof(T));
var e1 = Expression.Equal(Expression.Property(parameter, "Archived"), Expression.Constant(false));
var lambda = Expression.Lambda<Func<T, bool>>(e1, parameter);
return data.Where(lambda);
}
记住在 Linq 中:
var result = query.Where(condition1).Where(condition2);
相当于:
var result = query.Where(condition1 && condition2);
我有以下方法:
public List<Customer> SearchTest(string city, int skip, int take)
{
EcomContext db = new EcomContext();
var results = db.Customers.Where(n => n.City == city).OrdeyBy(n => n.Name).Skip(skip).Take(10);
results = AddDeleteCheck<Customer>(results);
return results.ToList()
}
以及这个可重复使用的方法:
private IQueryable<T> AddArchivedCheck<T>(IQueryable<T> data)
{
var parameter = Expression.Parameter(typeof(T));
var e1 = Expression.Equal(Expression.Property(parameter, "Archived"), Expression.Constant(false));
var e2 = data.Expression;
var e3 = Expression.Lambda<Func<T, bool>>(Expression.AndAlso(e1, e2), parameter);
return data.Where(e3);
}
我希望能够从许多不同的函数中调用此方法,因此我将其设为通用。它应该从 IQueryable 对象中获取表达式并对此添加检查 (Archived == false)。
我收到这个错误: 二元运算符 AndAlso 没有为类型 'System.Boolean' 和 'System.Linq.IQueryable` [Ecom.Customer]
定义比你写的更简单:
private static IQueryable<T> AddArchivedCheck<T>(IQueryable<T> data)
{
var parameter = Expression.Parameter(typeof(T));
var e1 = Expression.Equal(Expression.Property(parameter, "Archived"), Expression.Constant(false));
var lambda = Expression.Lambda<Func<T, bool>>(e1, parameter);
return data.Where(lambda);
}
记住在 Linq 中:
var result = query.Where(condition1).Where(condition2);
相当于:
var result = query.Where(condition1 && condition2);