2011-12-05 10 views
8

Chcę utworzyć metodę przechodzącego wyrażenie typu Expression<Func<T, string> tworzyć wyrażenia typu Expression<Func<T, bool>> filtrować właściwość ciąg z StartsWith, EndsWith i Contains podobne metody tych wyrażeń:Tworzenie Expression Linq z startswith, endswith i zawiera przechodzącą Expression <Func <T, string>>

.Where(e => e.MiProperty.ToUpper().StartsWith("ABC")); 
.Where(e => e.MiProperty.ToUpper().EndsWith("XYZ")); 
.Where(e => e.MiProperty.ToUpper().Contains("MNO")); 

metoda powinna wyglądać następująco:

public Expression<Func<T, bool>> AddFilterToStringProperty<T>(Expresssion<Func<T, string>> pMyExpression, string pFilter, FilterType pFiltertype) 

gdzie FilterType Jest to typ enum, który zawiera trzy z wymienionych operacji (StartsWith, EndsWith, Contains)

+8

Idź po to. Daj nam znać, czego próbujesz, a jeśli to nie zadziała, z przyjemnością Ci pomożemy. – drdwilcox

Odpowiedz

7

Spróbuj tego:

public static Expression<Func<T, bool>> AddFilterToStringProperty<T>(
    Expression<Func<T, string>> expression, string filter, FilterType type) 
{ 
    return Expression.Lambda<Func<T, bool>>(
     Expression.Call(
      expression.Body, 
      type.ToString(), 
      null, 
      Expression.Constant(filter)), 
     expression.Parameters); 
} 
+0

Dodałem do tej odpowiedzi wyrażenie "nie puste" –

4

Dzięki @dtb. Działa dobrze i dodałem wyrażenie "nie puste" dla tego przypadku:

public static Expression<Func<T, bool>> AddFilterToStringProperty2<T>(
         Expression<Func<T, string>> expression, string filter, FilterType type) 
    { 
     var vNotNullExpresion = Expression.NotEqual(
           expression.Body, 
           Expression.Constant(null)); 

     var vMethodExpresion = Expression.Call(
       expression.Body, 
       type.ToString(), 
       null, 
       Expression.Constant(filter)); 

     var vFilterExpresion = Expression.AndAlso(vNotNullExpresion, vMethodExpresion); 

     return Expression.Lambda<Func<T, bool>>(
      vFilterExpresion, 
      expression.Parameters); 
    } 
Powiązane problemy