将Linq用于具有某些集合的对象 - 未找到“选择”

时间:2012-06-08 00:03:04

标签: linq-to-objects

我遇到了一些似乎不支持Linq to Objects的集合实例。最近,使用默认的ASP.Net成员资格提供程序,此代码:

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

产生编译器错误

  

无法找到源类型的查询模式的实现   'System.Web.Security.MembershipUserCollection'。找不到“选择”。   考虑明确指定范围变量'm'的类型。

查询模式的实现位于何处?

我可以创建自己的实现吗?怎么样?

如何“明确指定”范围变量的类型,这会有帮助吗?

1 个答案:

答案 0 :(得分:2)

这个集合的问题是它实现了非通用的IEnumberable接口。 Linq扩展方法不适用于此非泛型接口,这就是您的代码无法编译的原因。 你可以在这做两件事。首先查看this link,它具有此非泛型接口的linq方法的实现。

另一种解决方案可能是使用IEnumerable确实具有的Cast方法:

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

现在你可以使用你想要的linq方法。