2009-12-01 23 views
1

我看到了哪裏在執行之前。 但我想知道有人可以讓我寫一篇文章「WhereAnyIn」。linq到實體,像WhereAnyIn這樣的運算符?

例如: 香港專業教育學院的實體: 帖子--- PostTag ---標籤

我需要參數INT [] tagids,這其中取有任何標籤識別的在給定的所有職位查詢 列表。

我找不出來。

感謝您的幫助。

回答

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