동적 평가를 위해 문자열을 LINQ 표현식 트리로 변환
배경
특정 시나리오에서는 객체 인스턴스에 대해 문자열로 정의된 논리식을 평가해야 합니다. 예를 들어, 이름, 나이, 체중과 같은 속성을 가진 사람을 나타내는 클래스가 있을 수 있으며 "Age > 3 AND Weight > 50"과 같은 문자열 표현식을 평가하려고 합니다.
과도하게 엔지니어링된 솔루션 제안
초기 아이디어는 ANTLR을 사용하여 문자열 표현식에서 AST를 생성하는 것이었습니다. 이후 AST는 Func
대체 솔루션: 동적 LINQ 라이브러리
사용자 지정 파서를 개발하는 대신 동적 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 FavoriteDay { get; set; } } static void Main() { const string filter = "(Person.Age > 3 AND Person.Weight > 50) OR Person.Age < 3"; var personParameter = Expression.Parameter(typeof(Person), "Person"); var lambdaExpression = DynamicExpression.ParseLambda(new[] { personParameter }, null, filter); var person = new Person { Name = "Bob", Age = 30, Weight = 213, FavoriteDay = new DateTime(2000, 1, 1) }; bool match = lambdaExpression.Compile().DynamicInvoke(person); Console.WriteLine(match); } } }
이 예에서는 동적 LINQ를 사용하여 식 문자열을 람다 식으로 구문 분석합니다. 그런 다음 람다 식을 컴파일하고 이를 Person 인스턴스에서 호출하여 식을 평가하고 부울 결과를 얻습니다.
결론
동적 LINQ 라이브러리는 보다 간단한 방법을 제공합니다. 객체에 대해 문자열 표현식을 동적으로 평가하는 솔루션입니다. 사용자 정의 파서를 개발할 필요가 없으며 문자열 표현식에서 람다 표현식을 구성하기 위한 편리한 메커니즘을 제공합니다.
위 내용은 C#에서 개체에 대해 문자열 식을 동적으로 평가하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!