当前位置: 首页 > 编程语言 > C#

为什么Select、Where和GroupBy这样组合会出现异常?分享

时间:2023-04-10 21:18:48 C#

这个Select、Where、GroupBy的组合为什么会出现异常?我有一个简单的服务表结构,每个服务都有很多设施。在数据库中,这是一个Service表和一个Facility表,其中Facility表引用了Service表中的一行。在我们的应用程序中,我们有以下LINQ作业:Services.Where(s=>s.Facilities.Any(f=>f.Name=="Sample")).GroupBy(s=>s.Type)。Select(g=>new{Type=g.Key,Count=g.Count()})但出于我无法控制的原因,源集在Where调用之前被转换为非实体对象,如下所示:Services。选择(s=>new{Id=s.Id,Type=s.Type,Facilities=s.Facilities}).Where(s=>s.Facilities.Any(f=>f.Name=="Sample")).GroupBy(s=>s.Type).Select(g=>new{Type=g.Key,Count=g.Count()})但这会抛出以下异常,内部没有异常:EntityCommandCompilationException:Thenested不支持查询.Operation1='GroupBy'Operation2='MultiStreamNest'但是,删除Where使其起作用,让我相信只有这种特定的方法调用组合:Services.Select(s=>new{Id=s.Id,Type=s.Type,Facilities=s.Facilities})//.Where(s=>s.Facilities.Any(f=>f.Name=="Sample")).GroupBy(s=>s.Type).Select(g=>new{Type=g.Key,Count=g.Count()})有没有办法做到以上几点:选择一个非实体对象,然后使用Where和GroupBy结果可查询?在Select工作后添加ToList,但大型源集使这不可行(它将在在数据库上执行查询,然后在C#中对逻辑进行分组)此异常源自EF源代码中的这段代码...////不支持公共处理//对于我们不打算支持的所有那些情况//作为孩子的嵌套操作,我们有这个例程来//完成工作。//privateNodeNestingNotSupported(Opop,Noden){//首先,访问我的孩子VisitChildren(n);m_varRemapper.RemapNode(n);//确保我们没有嵌套操作的孩子。foreach(varchiinn.Children){if(IsNestOpNode(chi)){thrownewNotSupportedException(Strings.ADP_NestingNotSupported(op.OpType.ToString(),chi.Op.OpType.ToString()));}}返回n;}我不得不承认:这里发生的事情并不明显,也没有公开EF的所有查询构建策略的技术设计文档。但是这段代码...//如果它有键,我们只能将嵌套拉到Join/Apply上,所以//我们可以订购东西;如果它没有密钥,我们将抛出NotSupported//异常。foreach(varchiinn.Children){if(op.OpType!=OpType.MultiStreamNest&&chi.Op.IsRelOp){varkeys=Command.PullupKeys(chi);如果(null==keys||keys.NoKeys){thrownewNotSupportedException(Strings.ADP_KeysRequiredForJoinOverNest(op.OpType.ToString()));}}}看一眼幕后。我只是在我自己的情况下尝试了一个OrderBy,它完全复制了你的情况,并且它有效。所以我很确定你是否这样做......Services.Select(s=>new{Id=s.Id,Type=s.Type,Facilities=s.Facilities}).OrderBy(x=>x.Id).Where(s=>s.Facilities.Any(f=>f.Name=="Sample")).GroupBy(s=>s.Type).Select(g=>new{Type=g.Key,Count=g.Count()})异常将消失。以上是C#学习教程:Select、Where、GroupBy这样组合为什么会出现异常?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: