2014-02-12 2 views
0

사용자가 if 문에 사용할 조건부 식을 지정하도록하려는 텍스트 상자가 있습니다. 예를 들어, 내 코드에서이라는 값을 가진 int이 있다고 가정 해 봅시다. 그러면 사용자는 "C -parsable 번호"등사용자 생성 조건문을 구현하는 방법은 무엇입니까?

@myParameter < 20

또는 어쩌면

@myParameter > 5 && @myParameter < 20

myTextBox 식으로 들어간다. 나는

ConditionalExpression cond = new ConditionalExpression(); 
cond.Expression = myTextBox.Text; //Get the text from textbox. 
cond.Parameters.Add("@myParameter",myVariable); //use value of 'myVariable" at "@myParameter" 

if (cond.Evaluate()){  //if cond evaluates to true 
    //do stuff 
} 

처럼 내 코드 인 뭔가가 문자열 구문 분석을 구현 내가 사용할 수있는 클래스의 어떤 종류가 있습니까 상상, 또는 내가 내 자신에 파싱 한 후 어떤 방법으로 시스템에서 ConditionalExpression 클래스를 이용하여 문자열을 어떻게해야합니까 .Linq.Expressions?

감사합니다.

+0

.NET에 내장 된 기능이 없기 때문에 문자열을 입력하여 다시 가져올 수 있습니다. 최소한 더 많은 작업을하지 않아도됩니다. 그러나 라이브러리가있어 원하는 것을 제공 할 수 있습니다. –

+0

Linq to Objects 또는 EF/SQL이 필요합니까? 이것이 EF 인 경우 문자열을 구문 분석하는 대신 ObjectQuery의 [QueryBuilder 메서드] (http://msdn.microsoft.com/en-us/library/bb338811(v=vs.110).aspx)를 사용할 수 있습니다. 수식 트리를 수동으로 생성합니다. –

답변

0

이 코드를 컴파일하려면 Roslyn API (Nuget에서 찾을 수 있음)를 사용할 수 있습니다. 매개 변수가 포함 된 개체를 세션 호스트 개체로 사용하고 SyntaxTree.ParseText를 사용하여 텍스트에서 조건을 컴파일 할 수 있습니다. 시스템에서 위험한 코드를 실행하지 않도록 사용자의 트리를 확인하십시오. Roslyn은 곧 .NET 프레임웍의 일부가 될 것이지만 현재는 Nuget 패키지가 있습니다.

관련 문제