문자열에서 LINQ 식을 동적으로 평가
문제:
"(Person.Age > 3 AND Person.Weight > 50) OR Person.Age < 3"인 경우 목표는 Func
오버베이크된 접근 방식:
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!