2011-12-14 21 views
1

我想这样做LINQ的,集合和一个布尔函数

return array.Any(IsOdd); 

但不是一个数组我有对象的列表,其中ISODD发生在object.Number财产作为其参数。

我想这

return objectList.Select(x => x.Number).Any(IsOdd); 

,但得到这个错误 “ '选择' 不是 'System.Collections.Generic.List(中myObject的)' 中的一员。”

另外我的代码实际上是在VB中,我使用vs 2010,但瞄准.net 2.0。

回答

4

更新答案

There is no official way使用LINQ在.NET 2.0,但如果你只关心LINQ到对象有LINQBridge帮助。

原来的答复

首先,你可以简单地使用的Any其他过载和写

return objectList.Any(o => IsOdd(o.Number)); 

第二,这听起来像你已经忘了你的文件using System.Linq - 虽然在那种情况下,直接调用Any也不管用。

+0

现在它也像他的靶向2.0 – 2011-12-14 23:27:10

1

由于您的目标是2.0,所以快速回答是.NET 2.0不支持LINQ或扩展方法

如果你决定你不想使用LINQBridge为@乔恩建议,你可以很容易重新创建自己的Any方法如下:

public static class MyLINQBridge { 
    public delegate TResult Func<T1, TResult>(T1 first); 
    public static bool Any<T>(this IEnumerable<T> source, Func<T, bool> predicate) { 
     foreach (var item in source) { 
      if (predicate(item)) { 
       return true; 
      } 
     } 
     return false; 
    } 

} 

由于您使用VS2010中,编译器支持拉姆达方法和can support extension methods,所以你的最终代码应该是这样的:

return objectList.Any(o => IsOdd(o.Number));