ホームページ > バックエンド開発 > C++ > C# で文字列から LINQ 式を動的に評価するにはどうすればよいですか?

C# で文字列から LINQ 式を動的に評価するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-06 18:25:40
オリジナル
463 人が閲覧しました

How can I dynamically evaluate LINQ expressions from strings in C#?

文字列からの LINQ 式の動的評価

問題:

を表す入力文字列が与えられたとします。 LINQ 式 (例: "(person.Age > 3) AND Person.Weight > 50) OR Person.Age を動的に作成することです。これは、Person クラスのインスタンスに対して評価できます。

過剰なアプローチ:

ANTLR 文法と Predicate Builder フレームワークを含む提案されたソリューションは、不必要に複雑になる可能性があります。

代替解決策: 動的LINQ

動的 LINQ ライブラリは、エレガントで簡単なソリューションを提供します。使用方法は次のとおりです:

using System;
using System.Linq.Expressions;
using System.Linq.Dynamic;

namespace ExpressionParser
{
    class Program
    {
        public class Person
        {
            public string Name { get; set; }
            public int Age { get; set; }
            public int Weight { get; set; }
            public DateTime FavouriteDay { get; set; }
        }

        static void Main()
        {
            // Input expression string
            const string exp = @"(Person.Age > 3 AND Person.Weight > 50) OR Person.Age < 3";

            // Compile expression into a lambda expression
            var p = Expression.Parameter(typeof(Person), "Person");
            var e = System.Linq.Dynamic.DynamicExpression.ParseLambda(new[] { p }, null, exp);

            // Create a Person instance
            var bob = new Person
            {
                Name = "Bob",
                Age = 30,
                Weight = 213,
                FavouriteDay = new DateTime(2000, 1, 1)
            };

            // Evaluate expression against the Person instance
            var result = e.Compile().DynamicInvoke(bob);

            // Print result
            Console.WriteLine(result);
            Console.ReadKey();
        }
    }
}
ログイン後にコピー

この例では、式文字列を動的に解析してラムダ式にし、それを Func にコンパイルします。その後、関数を Person インスタンスに対して評価して、指定された基準に一致するかどうかを判断できます。

動的 LINQ の利点:

  • 使いやすさ使用: からの LINQ 式の動的な構築を可能にするシンプルな API
  • 汎用性: 幅広い式の演算子と型をサポートします。
  • 軽量: 式の解析と評価に必要な機能のみが含まれています.

注: 覚えておいてくださいこのコードが機能するために System.Linq.Dynamic nuget パッケージを含めます。

以上がC# で文字列から LINQ 式を動的に評価するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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