2009-06-05 3 views
2

동적 Linq를 사용하고 where 절이 작동합니다. 이제 orderby 절을 추가하려고하지만 동적 표현식의 유형을 설정할 수없는 문제가 있습니다. 아래는 내가 가지고있는 코드를 작동 : 동적 Linq - 런타임에 orderby 표현식 유형 설정

class MyClass { 
    public string Owner; 
    public DateTime Inserted; 
} 

Expression<Func<MyClass, bool>> whereExpression = DynamicExpression.ParseLambda<MyClass, bool>("owner = \"joe\""); 
Expression<Func<MyClass, DateTime>> orderExpression = DynamicExpression.ParseLambda<MyClass, DateTime>("inserted"); 
var result = from item in table.Where(whereExpression).OrderBy(orderExpression) select item; 
result.ToList().ForEach(m => Console.WriteLine("inserted=" + m.Inserted + ".")); 

나는 할 수 있도록하고 싶습니다 무엇 ORDERBY 표현에서 서로 다른 특성을 사용해야하기 때문에

가 작동되지 않는 아래의 코드 같은 것을 사용합니다.

Expression<Func<MyClass, bool>> whereExpression = DynamicExpression.ParseLambda<MyClass, bool>("owner = \"joe\""); 
Type orderType = typeof(DateTime); 
Expression<Func<MyClass, orderType>> orderExpression = DynamicExpression.ParseLambda<MyClass, orderType>("inserted"); 
var result = from item in table.Where(whereExpression).OrderBy(orderExpression) select item; 
result.ToList().ForEach(m => Console.WriteLine("inserted=" + m.Inserted + ".")); 

컴파일러가 orderExpression을 줄여서 만족스럽지 않습니다. 런타임에 Func의 유형을 설정하는 방법이 있습니까?

답변

3

동적 인 Linq 확장 메소드가 나를 위해 모든 것을 처리하는 것처럼 보입니다. 나는 너무 열심히 만들고 있었다.

var result = from item in table.Where("owner = \"joe\"").OrderBy("inserted") select item; 
result.ToList().ForEach(m => Console.WriteLine("inserted=" + m.Inserted + ".")); 
0

그래, 하나의 문제는 DynamicLinq이 IComparer를 사용하여 정렬 할 수 없다는 것입니다. 나는 그것에 solution 있습니다.