无法将类型'System.Collections.Generic.List <System.Collections.Generic.IEnumerable <xxx >>'隐式转换为'System.Collections.Generic.List <xxx>

sre*_*ree 3 c# entity-framework

我收到以下错误.我用Google搜索了一天多,但我找不到确切的解决方案,请帮帮我谢谢

错误:无法隐式转换 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();
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 11

问题在于,目前您正在选择一系列序列 - 每个股东的一系列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();
Run Code Online (Sandbox Code Playgroud)

请注意,如何在多行上打破查询使得阅读更加简单.此外,如果您立即给它一个不同的值,那么将list变量初始化为a 是没有意义的new List<ShareholderUser>.我也删除了Include调用,因为这是不必要的 - 您Shareholder.ShareholderUsers在查询中明确选择,因此您不需要包含它.