0

LinqtoObjectsをサポートしていないように見えるコレクションのインスタンスに遭遇しました。最近では、デフォルトのASP.Netメンバーシッププロバイダーを使用して、次のコードを使用しています。

var membershipUsers = (from m in Membership.FindUsersByName(userName) select m);

コンパイラエラーが発生します

ソースタイプ「System.Web.Security.MembershipUserCollection」のクエリパターンの実装が見つかりませんでした。「選択」が見つかりません。範囲変数'm'のタイプを明示的に指定することを検討してください。

クエリパターンの実装はどこにありますか?

独自の実装を作成できますか?どのように?

範囲変数のタイプを「明示的に指定」するにはどうすればよいですか。それは役に立ちますか?

4

1 に答える 1

2

このコレクションの問題は、非汎用の IEnumberable インターフェイスを実装していることです。Linq 拡張メソッドは、この非ジェネリック インターフェイスには適用されないため、コードがコンパイルされません。ここでできることは 2 つあります。最初にこのリンクをチェックしてください。この非ジェネリック インターフェイスの linq メソッドが実装されています。

もう 1 つの解決策は、IEnumerable が持っている Cast メソッドを使用することです。

 var linqableMembershipUsers = membershipUsers.Cast<MembershipUser>();

これで、必要な linq メソッドを使用できます。

于 2012-06-09T13:43:36.200 に答える