2010-08-18 4 views
1

나는 여분의 코드 라인을 작성함으로써 통상적으로 할 수있는 일을 시도하고있다. 나는 내 질문에 답하는이 웹 사이트에서 거의 샘플을 보지 못했지만 여전히 달성하려고 노력하는 모든 것을 해결할 수는 없습니다. 내 데이터베이스에서 데이터를 가져 오지하기 위해 SQL에 Linq를 사용하고Dynamicallly Building Linq "where"clause

list<t> searchTerms; 

class t 
{ 
string columnName; 
string columnValue ; 
string columnType ; 
string FilterType; 
} 

및 목록과 함께 "여기서"절을 구축하고 싶습니다 : 여기

는 내가 뭘하려고 오전의 의사 코드

그래서 뭔가 같은 :

: 내가하고 싶은 것이

SearchTerm t = terms.Find(term => term.ColumnValue == "PartNo"); 
if (t != null) 
{ 
    switch (t.FilterType) 
    { 
    case FilterType.Contains: 
     q = q.Where(c => c.PartNo.Contains(t.Value)); 
     break; 

    case FilterType.EqualTo: 
     q = q.Where(c => c.PartNo.Equals(t.Value)); 
     break; 

    case FilterType.StartsWith: 
     q = q.Where(c => c.PartNo.StartsWith(t.Value)); 
     break; 
    } 
} 

t = terms.Find(term => term.ColumnValue == "ItemDesc"); 
if (t != null) 
{ 
    switch (t.FilterType) 
    { 
    case FilterType.Contains: 
     q = q.Where(c => c.ItemDesc.Contains(t.Value)); 
     break; 

    case FilterType.EqualTo: 
     q = q.Where(c => c.ItemDesc.Equals(t.Value)); 
     break; 

    case FilterType.StartsWith: 
     q = q.Where(c => c.ItemDesc.StartsWith(t.Value)); 
     break; 
    } 
} 

은 뭔가를 달성하기 위해 사용 람다 표현식/반영 searchTerms.ToLamdaExpression은()

이> 여기서 절 즉 표현의 입력 저를 반환해야

q.whereJoinExpression(searchTerms.ToLamdaExpression()); 

. 나는이 질문을 게시하기 전에 연구 며칠을 투자하고 올바른 방향으로 도움을 주셔서 감사합니다 것

q = q.Where(searchTerms.ToLamdaExpression()); 

로 및 은 whereJoinExpression 나에게 같은 결과를 얻을 수 있습니다.

+1

미래에 where 절에서 "and"대신 "and"를 사용하려는 경우 http://www.albahari.com/nutshell/predicatebuilder.aspx를 참조하십시오. –

+0

나에게 많은 도움이되지 않았다. ( – user424244

답변

3

Dynamic LinqPredicate Builder을 살펴보십시오.

+0

Dynamic LINQ는 강력한 타이핑의 모든 이점을 잃어 버렸고 항상 cop-out 솔루션처럼 보인다 .PredicateBuilder와 같은 것이 더 좋을 것이다. –

+0

그게 뭐야? – user424244

+0

@sharmasu : 역동적 인 쿼리 상황에서 일반적으로 사용자는 문자열 (예 : 드롭 다운에서 필드 선택)에서 쿼리를 작성하므로 강력한 입력이 도움이되는지 알 수 없습니다. –