Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.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# 基于实体框架的复杂Linq查询_C#_Sql_Linq_Entity Framework - Fatal编程技术网

C# 基于实体框架的复杂Linq查询

C# 基于实体框架的复杂Linq查询,c#,sql,linq,entity-framework,C#,Sql,Linq,Entity Framework,我正在尝试构建一个linq查询,根据当前用户的权限获取所有模块以及每个模块的形式,这样我就可以在用户登录时构建我的程序菜单 从以下数据库结构获得单个linq查询结果的最有效方法是什么? 因此,我可以对查询结果执行以下操作: foreach (var module in PermittedModuls) { //do some stuff ..... foreach(var form in module.Forms) { //do some stuff

我正在尝试构建一个linq查询,根据当前用户的权限获取所有模块以及每个模块的形式,这样我就可以在用户登录时构建我的程序菜单

从以下数据库结构获得单个linq查询结果的最有效方法是什么? 因此,我可以对查询结果执行以下操作:

foreach (var module in PermittedModuls)
{
   //do some stuff
   .....


   foreach(var form in module.Forms)
   {
     //do some stuff
     .....
   }
}
我已经有了一些“肮脏”的解决方案,但我相信有更好的方法

顺便说一下,我使用的是实体框架6

编辑!!!:对不起,伙计们,我想我的问题不清楚


我只想得到用户有权限的表单

在不知道如何过滤数据的细节的情况下,您可以将代码简化为

var forms = PermittedModules.SelectMany(x => x.Forms);
这将为您提供每个模块上的所有表单(假定这是您想要的)。

目前,您的代码基本上实现了您想要的功能,只是您希望指出,在执行原始查询时,应为每个项目迫切填充
表单,而不是懒洋洋地执行N次往返以获取每个模块的表单数据。要执行此操作,请使用
Include

foreach (var module in PermittedModuls.Include(m => m.Forms))
{
   //do some stuff

   foreach(var form in module.Forms)
   {
     //do some stuff
   }
}

这不允许他为
PermittedModuls
中的每个项目做一些事情,这是他的要求的一部分。@Servy它在哪里说的?OP询问“我正在尝试构建一个linq查询,根据当前用户的权限获取所有模块以及每个模块的形式……在单个linq查询中获取结果的最有效方式是什么”。这样他就可以按照给定代码段中描述的做。他已经证明,除了获取表单之外,他还在使用
模块
做一些事情。您的代码不允许这样做。@Servy他的代码根本没有表明这一点,您假设
//做一些事情
意味着他正在使用
模块
,而实际上它可能意味着任何事情。他的代码正好显示了这一点,假设
//做一些事情
意味着除“什么都不做”之外的任何事情。给定这个查询,您计划如何为每个模块执行该代码?包含不是问题,我只想获得允许用户查看的表单,具体取决于用户的权限permissions@user3041845你是说你问的问题与你想要什么无关?你的问题根本没有提到权限。@Seivy根据当前用户的权限,你说你有两个肮脏的解决方案。展示这些,以便我们提供改进。与其展示您的DB模型,不如展示您的EF模型