簡體   English   中英

如何使用表情樹

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM