2009-08-11 13 views
0

とwotrkingない、RadComboBoxItemCollectionはIEnumerableを実装するために表示されますが、LINQは言って私にエラーを与え続け:RadComboBoxItemCollectionは、私はいくつかの拡張メソッドを作成していると私はRadComboBoxItemCollectionでいくつかのエラーを取得していますLINQ

「の実装を見つけることができませんでした ソースタイプ のクエリパターン 'Telerik.Web.UI.RadComboBoxItemCollection'。 '場所が見つかりません 範囲変数' myItem 'の型を明示的に指定することを検討してください。フリップ側の

このコードから

public static bool ContainsValue(this RadComboBoxItemCollection myList, string value) 
{ 
     bool matches = (from myItem in myList where myItem.Value == value select myItem).Count() > 0; 
     return matches; 
} 

RadListBoxItemCollectionは

を私はIEnumerableををやってみましたし、これは、LINQのエラーを解決しますが、私はこのエラーを取得するだけで罰金

public static bool ContainsValue(this IEnumerable<RadListBoxItem> myList, string value) 
{ 
     bool matches = (from myItem in myList where myItem.Value == value select myItem).Count() > 0; 
     return matches; 
} 

の作品

"インスタンス引数:変換できません 「Telerik.Web.UI.RadComboBoxItemCollection」から に「System.Collections.Generic.IEnumerable」」

答えて

1

RadComboBoxItemCollectionは非ジェネリックIEnumerableインターフェイス(というよりも賢明なことをやってとIEnumerableを実装を実装します< RadComboBoxItem>)、標準のLINQ操作は機能しません。あなたは、最初の「キャスト」拡張メソッドを使用する必要があります:

var result = myList.Items.Cast<RadComboBoxItem>(); 

は、今あなたが持っているがはるかに便利なIEnumerableを< RadComboBoxItem>あなたが素晴らしいもののすべてのソートを行うことができます。しかし

public static bool ContainsValue(this RadComboBoxItemCollection myList, string value) 
{ 
     return myList.Items.Cast<RadComboBoxItem>().Count(item => item.Value.Equals(value, StringComparison.Ordinal)) > 0; 
} 

私よりも経験が豊富な人がこのアプローチの成果を語るかもしれません。右、私はforループを使用して、同様の修正を使用どこ

public static bool ContainsValue(this RadComboBoxItemCollection myList, string value) 
{ 
     foreach (var item in myList) 
      if (item.Value.Equals(value, StringComparison.Ordinal)) 
       return true; 

     return false 
} 
+0

あなたは、Telerikを更新している:それはちょうどそれが古い(前LINQ)の方法ではなく、RadComboBoxItemに各オブジェクトをキャストしないと、パフォーマンスのために良いかもしれませんこの問題を解決するコントロールがあります –