내가 작업중인 프로젝트에서 다소 이상한 데이터 소스로 작업해야합니다. 나는 그것에게 "쿼리"를 줄 수 있고 그것은 나에게 DataTable을 돌려 줄 것이다. 그러나 쿼리는 전통적인 문자열이 아닙니다. 그것은 마치 내가 원하는 기준을 정의하는 일련의 메소드 호출과 같습니다. 이 라인을 따라 뭔가 :C# : 임의의 문자열을 표현식 트리로 구문 분석하는 방법은 무엇입니까?
본질적으로var tbl = MySource.GetObject("TheTable");
tbl.AddFilterRow(new FilterRow("Column1", 123, FilterRow.Expression.Equals));
tbl.AddFilterRow(new FilterRow("Column2", 456, FilterRow.Expression.LessThan));
var result = tbl.GetDataTable();
, 모든 표준 물건 (등 부울 연산자, 괄호, 몇 가지 기능)하지만 매일 사용하기에 매우 상세하고 불편 작성하기위한 구문을 지원합니다.
주어진 구문 (예 : "Column1 = 123 AND Column2 < 456"
)을 구문 분석하여 위의 함수 호출로 변환하는 작은 구문 분석기를 만들고 싶습니다. 또한, 거기에 매개 변수를 추가 할 수 있으면 좋을 것이므로 주입 공격으로부터 보호 될 것입니다. 상단에있는 설탕의 마지막 작은 조각은 동일한 쿼리가 다른 개체에서 다시 실행될 때 구문 분석 결과를 캐시하고 다시 사용할 수있는 경우에 해당합니다.
궁금한 점이 있습니다. 기존 솔루션을 사용할 수 있습니까? 아니면 내 자신의 식 구문 분석기를 준비해야합니까? 너무 복잡하지는 않지만, 2 ~ 3 일의 코딩과 버그를 수정하여 해결할 수 있다면, 그만한 가치가 있습니다.
거대한 외모. 내 욕구가 작아. : P –
Irony 어셈블리의 크기는 171KB (디버그 버전)입니다. 소스 코드를 사용할 수 있기 때문에 필요한 경우 앱으로 컴파일 할 수 있습니다. 필요에 따라 코드를 사용하는 것이 매우 간단해야합니다 (코드가 많지 않음). 표현 파서/평가자 프로젝트에서이 코드를 사용합니다. 표현 언어가 설명했던 것보다 훨씬 복잡하지만 코드는 단지 수백 줄에 불과합니다. 반면에 DLR은 실제로 조금 더 크지 만 실제로는 필요하지 않습니다. – OregonGhost