2011-01-25 2 views
33

앞으로 어떤 시점에서 동적으로 생성 된 보고서를 다시 만드는 방법이 필요합니다. 간단히 말해, 특정 linq 쿼리 (각 보고서마다 다름)를 데이터베이스에 저장 한 다음 나중에 동적 Linq를 사용하여 쿼리를 실행해야합니다.식 <T, bool>을 문자열로 변환

이것은 모두 좋지만 표현식을 문자열로 변환하는 방법을 찾을 수 없습니다.

로 :

Expression<Func<Product, bool>> exp = (x) => (x.Id > 5 && x.Warranty != false); 

이 될해야합니다

"Product.Id > 5 && Product.Warranty != false" 

그렇게 할 수있는 방법이 있나요?

+2

'Expression >'을 (를) 묻는 것으로 생각합니다. 질문을 수정했습니다. –

+0

예, 맞습니다. func 부분을 나갔습니다. –

+0

아마 이것은 도움이 될 것입니다 : http://code.msdn.microsoft.com/exprserialization – sinelaw

답변

38

이 방법이 가장 좋고/가장 효율적인 방법은 아니지만 입니다.

Expression<Func<Product, bool>> exp = (x) => (x.Id > 5 && x.Warranty != false); 

string expBody = ((LambdaExpression)exp).Body.ToString(); 
// Gives: ((x.Id > 5) AndAlso (x.Warranty != False)) 

var paramName = exp.Parameters[0].Name; 
var paramTypeName = exp.Parameters[0].Type.Name; 

// You could easily add "OrElse" and others... 
expBody = expBody.Replace(paramName + ".", paramTypeName + ".") 
       .Replace("AndAlso", "&&"); 


Console.WriteLine(expBody); 
// Output: ((Product.Id > 5) && (Product.Warranty != False)) 
+0

정말 고마워, 많이! –