2009-12-01 4 views
1

Я видел, где в реализации раньше. Но мне интересно, может кто-нибудь покажет мне написать отпечаток «WhereAnyIn».linq для юридических лиц, таких как WhereAnyIn?

, например: Ive AN лица: сообщение --- PostTag --- Tag

мне нужен запрос с параметром ИНТ [] tagids, который где извлекающих все сообщения, которые имеет любой из TagID в данный список.

Я не могу понять это.

благодарит за вашу помощь.

ответ

1
static void Main(string[] args) 
    { 
     int[] integers = Enumerable.Range(0, 10).ToArray(); 
     Expression<Func<Post, bool>> expression = CreateWhereInExpression<Post, int>(p => p.Tag, integers); 
    } 

    static Expression<Func<TItem, bool>> CreateWhereInExpression<TItem, TValue>(Expression<Func<TItem, TValue>> lambda, TValue[] items) 
    { 
     if (lambda != null) 
     { 
      MemberExpression memberExpression = lambda.Body as MemberExpression; 
      if (memberExpression != null && memberExpression.Expression == lambda.Parameters[0]) 
      { 
       Expression body; 
       if (items == null || items.Length == 0) 
       { 
        body = Expression.Constant(
         true 
        ); 
       } 
       else 
       { 
        body = items.Skip(1).Aggregate(
         Expression.Equal(
          memberExpression, 
          Expression.Constant(items[0]) 
         ), 
         (expression, item) => Expression.OrElse(
          expression, 
          Expression.Equal(
           memberExpression, 
           Expression.Constant(
            item 
           ) 
          ) 
         ) 
        ); 
       } 
       return Expression.Lambda<Func<TItem, bool>>(
        body, 
        lambda.Parameters 
       ); 
      } 
     } 
     return null; 
    } 
Смежные вопросы