2010-12-08 63 views
1

我發現這個函數(對於「where in」查詢表達式),我想使用它,但是有一些錯誤,我不知道爲什麼,因爲我在很多論壇看到了這個函數,它應該工作...實體表達式錯誤

static Expression<Func<TElement, bool>> BuildContainsExpression<TElement, TValue>(

Expression<Func<TElement, TValue>> valueSelector, IEnumerable<TValue> values) 

{ 

    if (null == valueSelector) { throw new ArgumentNullException("valueSelector"); } 

    if (null == values) { throw new ArgumentNullException("values"); } 

    ParameterExpression p = valueSelector.Parameters.Single(); 

    // p => valueSelector(p) == values[0] || valueSelector(p) == ... 

    if (!values.Any()) 

    { 

     return e => false; 

    } 

    var equals = values.Select(value => (Expression)Expression.Equal(valueSelector.Body, Expression.Constant(value, typeof(TValue)))); 

    var body = equals.Aggregate<Expression>((accumulate, equal) => Expression.Or(accumulate, equal)); 

    return Expression.Lambda<Func<TElement, bool>>(body, p); 

} 

的錯誤是:

'System.Collections.ObjectModel.ReadOnlyCollection' 不包含定義 '單',沒有擴展方法 '單' 接受第一個參數爲 類型 「System.Collections.ObjectModel.ReadOnlyCollection」 可以發現(使用指令或程序集 引用是否缺少 ?)

「System.Collections.Generic.IEnumerable」 不包含定義 「任意」和沒有擴展方法「任意」 接受類型的第一個參數 「System.Collections.Generic.IEnumerable」 可以發現(使用指令或程序集 參考是否缺少 ?)

任何人都可以幫助我嗎? 預先感謝您。

+0

你確定你已經安裝了.NET Framework 3.5 Service Pack 1的? – Devart 2010-12-08 16:49:16

回答

6

你可能需要添加:

using System.Linq; 
+0

是的,謝謝你這是一個愚蠢的問題... – mbp 2010-12-09 11:05:08