我是表达式树的新手。
假设我有一个 Phrase 对象列表,我可以通过调用我创建的一些函数来生成表达式,如下所示:
ParameterExpression peObject = Expression.Parameter(typeof(Phrase), "type");
var qryAnyKeyWord = GetContainsAnyExpression("Description", keywords.ToArray(), peObject);
var qryAuthor = GetEqualsExpression<string>("Author", "jim", peObject);
var qryId = GetLessThanExpression<int>("Id", 4, peObject);
//the above are all binary expressions
我可以像这样组合表达式:
var qryCombined = Expression.AndAlso(qryAnyKeyWord, qryAuthor);
qryCombined = Expression.AndAlso(qryCombined, qryId);
我可以编译和使用这样的结果:
Expression<Func<Phrase, bool>> exp = Expression.Lambda<Func<Phrase, bool>>(qryCombined, peObject);
List<Phrase> selectedPhrases = phrases.Where(x => exp.Compile()(x)).ToList();
foreach (Phrase p in selectedPhrases)
show(p);
所有这些似乎都运作良好。
有没有办法在这样的语句中使用表达式:
IEnumerable<Phrase> selectedPhrases=
from p in phrases
where
//use "qryCombined" or "exp" here somehow
select p;
除了我的做法之外,还有其他方法可以调用表达式吗?有没有更标准或传统的方式?
提前感谢您提供的任何见解。