2009-12-01 6 views
1

J'ai vu whereIn implémentation avant. Mais je me demande si quelqu'un peut me montrer pour écrire une opration "WhereAnyIn".linq aux entités, opérateur comme WhereAnyIn?

par exemple: Ive une des entités: post --- --- PostTag Tag

je besoin d'une requête avec le paramètre int [] tagids, qui vont chercher où tous les postes qui a l'un des tagid dans la donnée liste.

Je n'arrive pas à comprendre.

merci pour votre aide.

Répondre

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; 
    } 
Questions connexes