Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法隐式转换类型';System.Collections.Generic.List<;System.Collections.Generic.IEnumerable<;xxx>&燃气轮机';至';System.Collections.Generic.List<;xxx>;_C#_Entity Framework - Fatal编程技术网

C# 无法隐式转换类型';System.Collections.Generic.List<;System.Collections.Generic.IEnumerable<;xxx>&燃气轮机';至';System.Collections.Generic.List<;xxx>;

C# 无法隐式转换类型';System.Collections.Generic.List<;System.Collections.Generic.IEnumerable<;xxx>&燃气轮机';至';System.Collections.Generic.List<;xxx>;,c#,entity-framework,C#,Entity Framework,我得到以下错误。我在谷歌上搜索了一天多,但我找不到确切的解决方案,请帮助我谢谢 错误:无法隐式转换类型 System.Collections.Generic.List 到 System.Collections.Generic.List 我使用了以下代码 List<ShareholderUser> list = new List<ShareholderUser>(); list = dataContext.EJMCShareholderApprovals

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

错误:无法隐式转换类型
System.Collections.Generic.List
System.Collections.Generic.List

我使用了以下代码

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();
List List=新列表();
list=dataContext.EJMCShareholderApprovals
.包括(s=>s.Holder.ShareholderUsers)
.Where(e=>e.EJMCRequestId==requestId)
.选择(s=>s.Holder.ShareholderUsers
.其中(x=>x.AccessMode==true))
.ToList();
这应该可以吗

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();
虽然您正在向股东用户选择?您是要获取股东列表还是股东列表

.Select(s => s.Shareholder.ShareholderUsers

现在的问题是,你正在选择一系列的序列——每个股东的股东用户项目的一系列。如果你只是想要一个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 List=dataContext.EJMCShareholderApprovals
.Where(e=>e.EJMCRequestId==requestId)
.SelectMany(s=>s.Holder.ShareholderUsers)
.Where(x=>x.AccessMode==true)
.ToList();

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

这将编译,但我认为它不会满足OP的要求。他们显式地为
list
指定了一个类型,这表明他们知道自己想要什么类型。。。您已经有效地更改了
列表的类型
,而不使用查询。我认为关键是要更改查询。我认为
.Include(s=>s.holder.ShareholderUsers)
行是多余的,因为我们选择了
s.holder.ShareholderUsers
无论如何:@Kobi:我会添加它作为一个注释,但我对EF的了解还不足以自信地说出来……如果您只使用您选择的内容,则无需添加包含。仅当您希望包含特定于上下文的内容,否则将延迟加载。谢谢@Jon Skeet。我得到了我所需要的准确输出。Kobi你是对的,.Include(s=>s.ShareholderUsers)是多余的。我删除了它,谢谢你的支持comment@JanneMatikainen:谢谢。在sree的确认下,我修改了答案,删除了
Include
调用。