无法隐式转换类型';System.Collections.Generic.List<;System.Colle

本文关键字:System Collections List Colle lt Generic 转换 类型 | 更新日期: 2023-09-27 18:03:27

我得到以下错误。我在谷歌上搜索了一天多,但我找不到确切的解决方案,请帮我谢谢

错误:无法隐式转换类型System.Collections.Generic.List<System.Collections.Generic.IEnumerable<ADCO.eJMC.EntityDataModel.ShareholderUser>>System.Collections.Generic.List<ADCO.eJMC.EntityDataModel.ShareholderUser>

我使用了以下代码

List<ShareholderUser> list = new List<ShareholderUser>();
list = dataContext.EJMCShareholderApprovals
                  .Include(s => s.Shareholder.ShareholderUsers)
                  .Where(e => e.EJMCRequestId == requestId)
                  .Select(s => s.Shareholder.ShareholderUsers
                                .Where(x => x.AccessMode == true))
                  .ToList();

无法隐式转换类型';System.Collections.Generic.List<;System.Colle

问题是,目前,您正在选择一系列序列-每个股东的一个ShareholderUser项目序列。如果您只想要ShareholderUser项目的列表,则需要将结果展平。使用SelectMany最容易做到这一点,在这种情况下,它实际上可以替换Select调用。

List<ShareholderUser> list = dataContext.EJMCShareholderApprovals
                                 .Where(e => e.EJMCRequestId == requestId)
                                 .SelectMany(s => s.Shareholder.ShareholderUsers)
                                 .Where(x => x.AccessMode == true)
                                 .ToList();

请注意,将查询拆分为多行也会使其阅读更加简单。此外,如果要立即给list变量一个不同的值,那么将其初始化为new List<ShareholderUser>是没有意义的。我还删除了Include调用,因为这是不必要的-您在查询中显式地选择了Shareholder.ShareholderUsers,所以不需要包含它。

应该这样做吗?

var list = dataContext.EJMCShareholderApprovals
              .Include(s => s.Shareholder.ShareholderUsers)
              .Where(e => e.EJMCRequestId == requestId)
              .Select(s => s.Shareholder.ShareholderUsers
              .Where(x => x.AccessMode == true)).ToList();

尽管您正在选择ShareHolderUsers?您正在尝试获取ShareHolderUsers列表还是ShareHolderUser列表?

.Select(s => s.Shareholder.ShareholderUsers
相关文章: