2012-11-11 3 views
3
내가 지금처럼 서명, 사용자 정의 필터에 따라, 객체의 지정된 세트를 반환하는 일반적인 확장 메서드 기록 할

:방법 소프트 코드에 Linq에/EF 쿼리

public static IEnumerable<T> GetObjects<T>(this ObjectSet<T> os, string fieldName, object value) where T : EntityObject {} 

물론 시그니처를 변경하여 여러 필터를 처리 할 수 ​​있지만 먼저 단일 필드 필터에 집중하겠습니다.

어떻게 이런 식으로 Linq 쿼리를 작성 하시겠습니까?

답변

6
당신은 동적으로 람다 표현을 구축하고,이 식으로 OS 용 Queryable.Where를 호출 할 필요가

:

public static IQueryable<T> GetObjects<T>(this ObjectSet<T> os, 
              string fieldName, object value) 
{ 
    var param = Expression.Parameter(typeof(T), "x"); 
    var body = Expression.Equal(
     Expression.PropertyOrField(param, fieldName), 
     Expression.Constant(value, value.GetType())); 
    var lambda = Expression.Lambda<Func<T, bool>>(body, param); 
    return os.Where(lambda); 
} 
+0

완벽한, 감사합니다! –

관련 문제