2016-04-18 2 views
0

私が働いていた、それ以下のコードを持っていますが、私はエラーを取得するコレクションをフィルタリングするWhere句を追加しようとすると:ジェネリックリストをフィルタリングする方法は?

'object' does not contain a definition for 'Where' and no extension method 'Where' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)

私はOfType<Certification>にオブジェクトをキャストしようと、それが失敗しました。私もIQueryableにキャストしようとしましたが、それは同様のエラーで失敗しました。だから私の認証変数のタイプを確認しました。それは"System.Collections.Generic.List``1[[GainesTrader_WCF.Certification, GainesTrader WCF,"です。これに対する解決策が見えますか?

GainesTrader_WCF.Service1 client = new GainesTrader_WCF.Service1(); 
    object certifications = client.GetCertifications(); 
    //var filtered = certifications.OfType<Certification>().Where(o => o.CertificationAcronym == "MCSD"); 
    var filtered = certifications.Where(o => o.CertificationAcronym == "MCSD"); 
    Certifications.DataSource = filtered; 
    Certifications.DataBind(); 
+2

'client.GetCertificationsは()'どのような型を返すのですか?コンパイラのエラーは正しいです - 'オブジェクト'には 'Where'メソッドまたは拡張メソッドがありません。 'object'ではなく、適切なコレクション型を使う必要があります。 –

+0

WCFでこのタグが付けられているのはなぜですか?それはWCFとは関係ありません。 – Tim

+0

Tim。私はそれが私の変数名に基づいてWCFを提案したと私はちょうど細心の注意を払うことなく受け入れたと思う。 WCFを削除するタグを編集しました。 –

答えて

1

はなぜ型オブジェクトの証明書変数のですか? WCFプロキシを見て、戻り値の型を確認します。プロキシを設定すると、Visual Studioは関連するすべてのタイプをダウンロードしているはずです。

また、これは私は誰かがObject型にどこに拡張メソッドを適用する見てきた、初めてです。それは意味をなさない。

+0

私はD・スタンレーへの正しい答えを与えるだろうが、彼は唯一のコメントを掲載。コメントが正解に近いです。彼が示唆したように、私は、VARにオブジェクトから変数の型を変更し、それが働いた。私は、ときにそれを好みます答えは簡単です。あなたは正しいです - それをオブジェクトとして宣言するのは理にかなっていません。私はまだLinqには新しく、varは私には直感的ではありません。 –

1

あなたcertifications変数がIEnumerable<Certification>型にキャストする必要があります。

var filtered = certifications 
    .OfType<IEnumerable<Certification>>() 
    .Where(o => o.CertificationAcronym == "MCSD"); 

または

var certifications = (IEnumerable<Certification>)client.GetCertifications(); 
var filtered = certifications.Where(o => o.CertificationAcronym == "MCSD"); 
+0

これを試してみましたが、.OfTypeを認識しなかったので失敗しました(私はすでにその解決策を試していました)。したがって、私はweb.configにMVCのバージョンが必要だと簡単に検索しました。このプロジェクトはMVCではありませんでしたので、そこにはありませんでした。 MVCのバージョンタグをweb.configに追加し、Webサイトをクラッシュさせました。私はそれが動作しているので、これをそのままの状態にしておきます。私はMCADの認定資格を除外したかったのですが、大したことではありません。私はこれをデバッグするのに時間を費やしたくありません。あなたが簡単な修正を見るなら、私は試してみましょう。ありがとう。 –

+2

'OfType'はMVCとは関係ありません。問題は、あなたが 'WHERE'法(またはextension'を持たない' object'として 'certifications'を宣言したということである。 –

+0

D・スタンレー、それはソリューションです。ありがとう。私はvarとそれにオブジェクト型を変更しました働いていた。 –

関連する問題