2013-05-13 4 views
1

LINQ to SQL을 사용하여 데이터를 쿼리하고 있지만 쿼리를 제출하기 전에 식에 추가하고 싶습니다. 내가 표현을 변경하거나 다른 곳이나있는 OrderBy를 추가하고 싶다면쿼리하기 전에 LINQ 식 작성하기

public virtual IQueryable<T> Query<T>(Expression<Func<T, bool>> expression = null) where T : class 
    { 
     var table = GetTable<T>(); 
     return expression != null ? table.Where(expression).OrderBy("OrderBy") : table; 
    } 

, 나는 실제 테이블을 쿼리하기 전에 그렇게 할 수있다 : 지금까지,이 있나요? 이런 식으로 뭔가 :

public virtual IQueryable<T> Query<T>(Expression<Func<T, bool>> expression = null) where T : class 
    { 
     var table = GetTable<T>(); 
     expression.Where(my1stWhereClause).Where(my2ndWhereClause); 
     expression.OrderBy("my1stColumn"); 
     expression.ThenBy("my2ndColumn"); 
     return expression != null ? table.Where(expression) : table; 
    } 
+0

제공하신 코드를 사용해 보셨습니까? – Maarten

+0

@Maarten 일반적으로 사람들이 해결하고자하는 것처럼 보이는 코드를 제공하면 의사 코드가됩니다. – Patashu

답변

4

이 같은, 당신이 전화를 각 메서드에서 반환 값을 사용할 필요가 :

public IQueryable<T> Query<T>(Expression<Func<T, bool>> expression = null) 
    where T : class 
{ 
    IQueryable<T> query = GetTable<T>(); 
    query = query.Where(my1stWhereClause).Where(my2ndWhereClause); 
    // Doing this dynamically doesn't really work.. 
    query = expression.OrderBy(x => x.My1stColumn) 
         .ThenBy(x => x.My2ndColumn); 
    return expression != null ? query.Where(expression) : query; 
} 

이 모르게 당신이 my1stWhereClausemy2ndWhereClause을 기대하고 어떻게 정말 분명하지 않다 T 사전에 ... OrderByThenBy을 호출하려면 실제로 다루고있는 유형을 알아야합니다.

그러나 이와 같은 쿼리를 작성하는 아이디어는 LINQ에서 매우 많이 지원됩니다. 여기에서 반환해도 여전히 이 실행되지 않으며 데이터 소스에 대해 아무 것도 실행되지 않습니다.

+0

답변 해 주셔서 감사합니다. 이 함수는 솔루션의 다른 개발자가 사용하는 데이터 프레임 워크의 일부입니다. 그래서 내 생각은 사람들이 Dynamic LINQ (명시 적 my2ndWhereClause를 설명하는)를 사용하여 사용자 정의 표현식을 전달할 수있게하는 것입니다. 그러나 여전히 제공하는 표현식에 특정 규칙을 적용해야하므로 동적으로 쿼리를 작성해야합니다. –

+0

@drminnaar : Dynamic LINQ (질문에 언급되지 않은)가 LINQ to SQL과 함께 작동합니까? 나는 그것을 사용하지 않았으므로 몰라요. 그렇다면,이 접근법이 효과가있을 것으로 기대합니다. –

+0

그럴 수 있습니다. 나는 당신이 나에게 동적 LINQ를 주었을 때를 감쌌다. 그리고 그것은 완벽하게 작동한다. 도와 줘서 고마워. –