繁体   English   中英

如何将谓词作为变量传递给Expression <Func<T> &gt;

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM