我遇到了一些似乎不支持Linq to Objects的集合实例。最近,使用默认的ASP.Net成员资格提供程序,此代码:
var membershipUsers = (from m in Membership.FindUsersByName(userName) select m);
产生编译器错误
无法找到源类型的查询模式的实现 'System.Web.Security.MembershipUserCollection'。找不到“选择”。 考虑明确指定范围变量'm'的类型。
查询模式的实现位于何处?
我可以创建自己的实现吗?怎么样?
如何“明确指定”范围变量的类型,这会有帮助吗?
答案 0 :(得分:2)
这个集合的问题是它实现了非通用的IEnumberable接口。 Linq扩展方法不适用于此非泛型接口,这就是您的代码无法编译的原因。 你可以在这做两件事。首先查看this link,它具有此非泛型接口的linq方法的实现。
另一种解决方案可能是使用IEnumerable确实具有的Cast方法:
var linqableMembershipUsers = membershipUsers.Cast<MembershipUser>();
现在你可以使用你想要的linq方法。