2012-11-26 5 views
1

나는 레코드 목록을 필터링하는 공통 기능을 사용하고있다. 동적 쿼리 라이브러리를 사용하는 C# 필터 목록?

함수

이하이다

class FilterRecords 
{ 

    public static object ParseExpression(string Condition, string FilterColumn) 
    { 
     string _operator = ""; 
     string _condition = "";      

     if (Condition.Substring(0, 1) == "<" || Condition.Substring(0, 1) == ">") 
     { 
      _operator = Condition.Substring(0, 1); 

      if (Condition.Substring(1, 1) == "=") 
      { 
       _operator += "="; 
       _condition = Condition.Substring(2); 
      } 
      else 
      { 
       _condition = Condition.Substring(1); 
      } 
      _operator = "="; 
      return (dbContext.OrdsRlsds.AsQueryable().Where(FilterColumn + " " + _operator + " " + " @0", _condition).ToList()); 
     } 
     else 
     { 
      if (Condition.Contains(',')) 
      { 
       string[] conds = Condition.Split(','); 
       return (dbContext.OrdsRlsds.AsQueryable().Where(FilterColumn + " >= @0 && " + FilterColumn + " <= @1", conds).ToList()); 

      } 
      else 
      { 
       return (dbContext.OrdsRlsds.AsQueryable().Where(FilterColumn + " == @0", Condition).ToList()); 
      } 
     } 
    } 
} 

이 기능은 동적 쿼리 라이브러리를 사용한다. 현재는 한 가지 유형의 레코드 (OrdsRlsds) 만 필터링합니다. 모든 컬렉션을 전달한 다음 필터링 된 결과를 다시 가져올 수 있도록이 필터를 일반 필터로 만들어야합니다.

+0

것은이 주제를 시도 http://stackoverflow.com/questions/7557761/apply- multiple-filtering-to-wpf-dataagrid-c-sharp를 사용하면 아마도 약간의 아이디어를 얻을 수있을 것입니다. – Godfre

+0

그 질문은 나 한테 물어봐 : – sony

답변

1

Entity Framework를 사용하고 있습니까? 그렇다면 제네릭으로 이런 식으로 할 수 있습니까?

public static IList<T> ParseExpression<T>(string Condition, string FilterColumn) where T:class 
{ 
    var query = dbContext 
       .CreateObjectSet<T>() 
       .AsQueryable(); 

    //add filters etc. 

    return query.ToList(); 
} 
당신은 다음과 같이 당신의 방법에 대한 형식 인수로 필요한 개체 유형을 통과해야

:

FilterRecords.ParseExpression<OrdsRlsd>(condition, filterColumn); 
+0

안녕하세요, 좋은 대답. 나는 그 마지막 부분을 얻지 못했습니다. "그러면 메소드에 형식 인자로 필요한 엔티티 유형을 전달해야합니다." 도와 주셔서 감사합니다. 감사합니다 – sony

+0

또한 Tom, 필터를 수행해야하는 관찰 가능한 컬렉션이 있습니다. 이 관찰 가능한 컬렉션을이 함수에 전달하고 필터링 된 레코드로 새로운 관찰 가능한 컬렉션을 다시 얻을 수 있습니까? – sony

+0

답변을 업데이트했습니다. 데이터가 EF/데이터베이스에서 온다고 생각하여 두 번째 설명이 어떻게 적용되는지 잘 모르겠습니다. –