【问题标题】:Problems with casting LinQ result to strongly typed collection将 LinQ 结果转换为强类型集合的问题
【发布时间】:2010-10-22 10:04:20
【问题描述】:

我想这是微不足道的,但对我来说不是。

我有一个集合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

感谢您的宝贵时间。

【问题讨论】:

    标签: c# .net linq collections casting


    【解决方案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);
    }
    

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

    【讨论】:

    • 谢谢,编译器说有一个显式转换。
    【解决方案2】:

    可能的解决方案之一:

       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);
    }
    

    【讨论】:

      【解决方案3】:

      所以这是微不足道的,我只需要像这样投射它:

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

      谢谢大家的回答。

      【讨论】:

      • 不幸的是它不起作用。 VS IDE 接受了这一点,但在编译期间它返回了错误。
      猜你喜欢
      • 2012-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多