2011-12-14 14 views
1

私はこのLINQの、コレクション、およびブール関数

return array.Any(IsOdd); 

をしたいが、配列の代わりに私がISODDは、その引数としてobject.Numberプロパティに要するオブジェクトのリストを持っています。

私はこの

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

を試みたが、このエラーを得た " 'を選択' '(myObjectというの)System.Collections.Generic.List' のメンバではありません。"

また、私のコードは実際にはVBで、私はvs 2010を使用していますが、.net 2.0をターゲットにしています。

答えて

4

更新答え

There is no official wayあなたがオブジェクトにLINQにのみ関心がある場合を支援するLINQBridgeがありますが、.NET 2.0でLINQを使用します。であるが -

オリジナル答え

まず第一に、あなたは単にあなたがあなたのファイルにusing System.Linqを忘れてしまっているように、この音、Anyの他のオーバーロードを使用して

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

秒を書くことができますその場合は、Anyのストレートコールも機能しません。

+0

そして彼は2.0 –

+0

をターゲットているようになりました、それも見えます@AnthonyPegram:答えが愚かに見えないように更新しました。ありがとうございます。 – Jon

1

2.0をターゲットにしているため、すぐに回答できるのはです.LBI 2.0はLINQまたは拡張メソッドをサポートしていません。

次のようにあなたが@ジョンが示唆するように、あなたは非常に簡単に独自のAny方法を再作成することができますLINQBridgeを使用しないことを決定した場合:

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)); 
関連する問題