![](/img/trans.png)
[英]How to pass Expression<Func<T, bool>> predicate as a parameter to a method?
[英]How can pass predicate as variable to Expression<Func<T>>
我在服务层中有一个Get()
函数:
IEntityService:
IEnumerable<T> GetAllQuerable(Expression<Func<T, bool>> filter = null,
Func<IQueryable<T>, IOrderedQueryable<T>> orderBy = null,
string includeProperties = "");
EntityService:
public IEnumerable<T> GetAllQuerable(Expression<Func<T, bool>> filter = null, Func<IQueryable<T>, IOrderedQueryable<T>> orderBy = null, string includeProperties = "")
{
return _repository.Get(filter, orderBy, includeProperties);
}
我通常用这样的显式谓词来调用此方法:
var result = _myModelService.Get(x => x.myPropery =="someValue").OrderByDescending(x => x.Date);
现在我想将谓词作为变量传递给Get()
。 查找之后,我发现可以创建Predicate<T>
但仍然无法将谓词传递给Get()
方法。
将谓词作为变量传递给Expression<Func<T>>()
的最佳解决方案是什么?
如果您确实需要一个表达式树(用于SQL),则不能作弊并将其称为不透明委托。 EF无法将Predicate<T>
转换为SQL。
您需要在各处使用表达式树。
只要使用表达式树创建变量,您就应该能够将其传递给您喜欢的所有对象:
public IEnumerable<MyType> GetFromRepository(Expression<Func<MyType, bool>> filter)
{
_myModelService.Get(filter)
.OrderByDescending(x => x.Date);
}
// later....
Expression<Func<MyType, bool>> myFilter = x => x.myProperty == "someValue";
GetFromRepository(myFilter);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.