无法隐式转换类型&#39; System.Collections.Generic.List <system.collections.generic.ienumerable <xxx>&gt;&#39;到&#39; System.Collections.Generic.List <xxx> </xxx> </system.collections.generic.ienumerable <xxx>

时间:2014-05-14 06:12:35

标签: 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();

2 个答案:

答案 0 :(得分: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();

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

答案 1 :(得分:0)

应该这样做吗?

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列表或ShareHolderUsers列表?

.Select(s => s.Shareholder.ShareholderUsers