[英]How to use expression trees
我是表情樹的新手。
假設我有一個短語對象列表,我可以通過調用一些這樣創建的函數來生成表達式:
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;
除了我的操作方式之外,還有其他調用表達式的方式嗎? 有更標准或常規的方法嗎?
在此先感謝您提供的任何見解。
您需要部分創建查詢,然后調用擴展方法,該方法將應用表達式填充來過濾數據。
IQueryable<Phrase> selectedPhrases=
from p in phrases
select p;
selectedPhrases = selectedPhrases.Where(CreateFilterExpression());
不,沒有辦法將您擁有的Expression
對象用作查詢表達式中的該查詢運算符。 您需要使用方法語法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.