0

式ツリーは初めてです。

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;

私がやっている方法以外に式を呼び出す方法はありますか? より標準的または従来の方法はありますか?

あなたが提供できる洞察を前もって感謝します。

4

2 に答える 2