2014-01-10 2 views
0

Вот мой код выглядит следующим образом:Как использовать метод Contains в классе Expression в C#?

protected Expression<Func<T, bool>> GetLambdaForField(string SearchTxtBox) 
    { 
     // Build a Lamda expression to get the Node headers for this sub master. 
     ConstantExpression constForeignKeyID = Expression.Constant(SearchTxtBox); 

     ParameterExpression paramEntity = 
      Expression.Parameter(typeof(T), "e"); 

     MemberExpression mex = 
      LambdaExpression.PropertyOrField(paramEntity, DefaultSearchFieldName); 

     BinaryExpression filter = Expression.Equal(mex, constForeignKeyID); 

     Expression<Func<T, bool>> exprLambda = 
      Expression.Lambda<Func<T, bool>>(filter, 
      new ParameterExpression[] { paramEntity }); 

     return exprLambda; 
    } 

Я использовал Expression.Equal(...);, но это не то, что я на самом деле хотел добиться. Я хотел что-то вроде метода Expression.Contains (чтобы он мог найти запись с частичной информацией, не заставляя меня вводить полное значение).

+1

Не могли бы вы предоставить более подробную информацию о том, какова цель этой функции? Его непонятно, что вы на самом деле хотите делать. –

+0

Привет, Брайан, Получил ответ уже. –

ответ

1

Вы хотите использовать Expression.Call метод:

var filter = Expression.Call(mex, 
    typeof(string).GetMethod("Contains"), 
    constForeignKeyID); 

Это равно следующее выражение:

x => x.Prop.Contains(searchString) 

Надеется, что это помогает.

Смежные вопросы