2013-01-29 2 views
0

Dynamic Data Project를 사용하여 IQueryable 개체에 대한 쿼리를 실행하려고합니다. 텍스트가 내 개체의 "SubjectID"필드에 포함되어 있는지 확인하는 쿼리를 수행하려고합니다.DynamicData 프로젝트의 IQueryable

public partial class SubjectIDFilter : System.Web.DynamicData.QueryableFilterUserControl 
    { 
     protected void Page_Init(object sender, EventArgs e) 
     { 
     } 

     public override System.Linq.IQueryable GetQueryable(System.Linq.IQueryable source) 
     { 
      if (string.IsNullOrEmpty(this.textBox.Text)) 
      { 
       return source; 
      } 

      return source; 
     } 

     protected void btnSearch_Click(Object sender, 
          EventArgs e) 
     { 
      OnFilterChanged(); 
     } 

     public override Control FilterControl 
     { 
      get 
      { 
       return this.textBox; 
      } 
     } 
    } 

코드는 "GetQueryable"방법에 배치해야합니다 :

여기 내 필터 클래스입니다.

"source.Where ..."를 쓰려고했지만 IDE intellisence가 내 원본 개체에서 해당 LINQ 메서드 ("Select, Where ..")를 인식하지 못합니다. "Expression"개체 (CreateQuery 메서드)를 사용하여 쿼리를 작성하는 방법을 알지 못했습니다.

해당 개체에 대해 간단한 SQL 쿼리를 수행하려면 어떻게해야합니까?

답변

0

식을 만들고 IQueryProvider.CreateQuery을 사용하여 반환해야합니다. 다음은 당신이 원하는 것을 할 수있는 코드는 다음과 같습니다

public override IQueryable GetQueryable(IQueryable source) 
{ 
    if (string.IsNullOrEmpty(textBox.Text)) 
    { 
     return source; 
    } 

    string filterValue = textBox.Text; 
    ConstantExpression value = Expression.Constant(filterValue); 

    ParameterExpression parameter = Expression.Parameter(source.ElementType); 
    MemberExpression property = Expression.Property(parameter, Column.Name); 
    if (Nullable.GetUnderlyingType(property.Type) != null) 
    { 
     property = Expression.Property(property, "Value"); 
    } 

    Expression comparison = Expression.Call(property, typeof(string).GetMethod("Contains", new [] { typeof(string) }), value); 
    LambdaExpression lambda = Expression.Lambda(comparison, parameter); 

    MethodCallExpression where = Expression.Call(
     typeof(Queryable), 
     "Where", 
     new[] { source.ElementType }, 
     source.Expression, 
     lambda); 

    return source.Provider.CreateQuery(where); 
} 

이 코드는 올렉의 Sych Understanding ASP.NET Dynamic Data: Filter Templates 블로그 게시물에서 가져옵니다. 그것은 동적 데이터 필터링 메커니즘의 두드러기에서 무슨 일이 일어나고 있는지에 대한 좋은 통찰력을 제공하며 여러분이 읽을 수 있도록 적극 추천합니다.