我收到以下错误。我用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();
答案 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