ホームページ >バックエンド開発 >C++ >linqのタイプ「式」の論理式を組み合わせる方法は?

linqのタイプ「式」の論理式を組み合わせる方法は?

DDD
DDDオリジナル
2025-01-31 06:01:09565ブラウズ

How to Combine Logical Expressions of Type `Expression` in LINQ?

linqでは、タイプの論理式を組み合わせます

Expression<Func<bool>> linqはしばしば式を使用し、式はラムダ発現の表現です。式を処理する場合、多くの場合、2つの論理式が必要です。 たとえば、

次の2つの式を検討してください

これらの式を組み合わせて、同じタイプの新しい表現を取得することをお勧めします。

同じパラメーターとの組み合わせの表現
<code class="language-csharp">Expression<Func<bool>> expr1;
Expression<Func<bool>> expr2;</code>

および
<code class="language-csharp">// 示例用法(原样无效)
Expression<Func<bool>> andExpression = expr1 AND expr2;</code>
同じパラメーターを使用する場合、操作は非常に単純です:

組み合わせの異なるパラメーターの式

expr1ただし、式が異なるパラメーターを使用する場合、それらを結合する方法に注意を払う必要があります。これを実現するには、を使用してください expr2

一般的な方法
<code class="language-csharp">var body = Expression.AndAlso(expr1.Body, expr2.Body);
var lambda = Expression.Lambda<Func<bool>>(body, expr1.Parameters[0]);</code>

次のコードフラグメントは、組み合わせ式を決定する最も適切な方法を決定する一般的な方法を提供します。

その他の予防策

Invoke .NET 4.0以降のバージョンでは、

クラスを使用してEFセキュリティ式を作成できます。
<code class="language-csharp">static Expression<Func<bool>> AndAlso<T>(
    this Expression<Func<bool>> left,
    Expression<Func<bool>> right)
{
    var param = Expression.Parameter(typeof(T), "x");
    var body = Expression.AndAlso(
            Expression.Invoke(left, param),
            Expression.Invoke(right, param)
        );
    var lambda = Expression.Lambda<Func<bool>>(body, param);
    return lambda;
}</code>

この復活した出力は、より簡潔で読みやすいコードスニペットを提供します

以上がlinqのタイプ「式」の論理式を組み合わせる方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。