ホームページ > バックエンド開発 > C++ > C#式で論理式を組み合わせる方法は?

C#式で論理式を組み合わせる方法は?

Mary-Kate Olsen
リリース: 2025-01-31 05:51:08
オリジナル
982 人が閲覧しました

How to Combine Logical Expressions in C# Expression?

c#式では、論理式

を組み合わせます 2つの

型式がある場合、論理演算子(など、または、またはそうでない)を使用してそれらを結合する必要がある場合があります。この記事では、この目標を達成するためのさまざまな方法について説明します。

Expression<Func<bool>>同じパラメーターインスタンス

2つの式が同じを使用している場合、組み合わせは単純です。

これは、単一の操作を無効にすることにも適用できます。 ParameterExpression

さまざまなパラメーターの例
<code class="language-csharp">var body = Expression.AndAlso(expr1.Body, expr2.Body);
var lambda = Expression.Lambda<Func<bool>>(body, expr1.Parameters[0]);</code>
ログイン後にコピー
式が異なるパラメーターインスタンスを使用している場合、

を使用して組み合わせることができます。

<code class="language-csharp">static Expression<Func<bool>> Not<T>(
    this Expression<Func<bool>> expr)
{
    return Expression.Lambda<Func<bool>>(
        Expression.Not(expr.Body), expr.Parameters[0]);
}</code>
ログイン後にコピー
このメソッドは、

およびにも適用できます。

一般的な方法

Invoke

これら2つの状況に対処するために、1つの一般的な方法は、どのパラメーターが一致するかを検出し、適切な組み合わせ方法を選択できます。
<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>
ログイン後にコピー

ef互換性OrElseNot .NET 4.0から、

>

は、EF互換式を構築するメカニズムを提供しました。 特定のシーンと一致するメソッドを選択することにより、

インスタンスの論理式を効果的に組み合わせることができます。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート