将LinQ结果转换为强类型集合的问题

时间:2010-10-22 10:04:21

标签: c# .net linq collections casting

我想这是微不足道的,但不适合我。

我有一个集合MembershipUserCollection。我想对它执行一些Linq查询,因此我使用了OfType<MembershipUser>()方法,然后在其上应用了Where()。但是,我不知道如何将结果反馈给MembershipUserCollection

这是我的代码:

MembershipUserCollection Users;
Users = GetAllUsers(pageIndex, pageSize, out totalRecords).OfType<MembershipUser>().Where(user => user.Email == emailToMatch); //how to cast it back to MembershipUserCollection ?

GetAllUsers(pageIndex, pageSize, out totalRecords)正在返回MembershipUserCollection

感谢您的时间。

3 个答案:

答案 0 :(得分:1)

我认为你不能在查询中做到这一点,但你应该能够做到这一点:

var query = GetAllUsers(pageIndex, pageSize, out totalRecords)
                .OfType<MembershipUser>()
                .Where(user => user.Email == emailToMatch);

var users = new MembershipUserCollection();
foreach (var user in query)
{
    users.Add(user);
}

(当然,如果需要,可以将该逻辑包装到扩展方法中,然后在查询中调用扩展方法。)

答案 1 :(得分:0)

可能的解决方案之一:

   var users = GetAllUsers(pageIndex, pageSize, out totalRecords)
      .OfType<MembershipUser>()
      .Where(user => user.Email == emailToMatch);

   MembershipUserCollection membershipUsers = new MembershipUserCollection();
   users
      .ToList()
      .ForEach(membershipUsers.Add);

另一个带有foreach陈述的人:

foreach (var user in users)
{
    membershipUsers.Add(user);
}

答案 2 :(得分:0)

所以这很简单,我只需要像这样投射:

MembershipUserCollection Users;
Users = (MembershipUserCollection)GetAllUsers(pageIndex, pageSize, out totalRecords).OfType<MembershipUser>().Where(user => user.Email == emailToMatch).Cast<MembershipUser>();

谢谢你的朋友们。