文字列からの 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 動的 LINQ の利点: 注: 覚えておいてくださいこのコードが機能するために System.Linq.Dynamic nuget パッケージを含めます。 以上がC# で文字列から LINQ 式を動的に評価するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。