2014-02-28 153 views
0

我试图建立一个linq查询,以获取所有模块的每个模块的形式取决于当前用户的权利,所以我可以建立我的程序菜单上的用户日志上。实体框架上的复杂Linq查询

什么是从以下数据库结构中获得单个linq查询结果的最有效方法? the following database structure? 因此,我可以做的查询结果如下:

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


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

我已经得到了一些“脏”的解决方案,得到它,但我敢肯定有更好的方法来做到这一点。

顺便说一句,我使用实体框架6

编辑!!!:对不起球员,我想我的问题不明确。

我只拿到了用户有权限的表单!!!

+0

你说你有几个肮脏的解决方案。显示这些,以便我们可以提供改进。 –

+0

而不是显示您的数据库模型,显示您的EF模型 – James

回答

1

不知道你是如何计划筛选数据的详细信息,可以简化您的代码

var forms = PermittedModules.SelectMany(x => x.Forms); 

这会给你所有形式的每一个模块上(假设这是你想要的)。

+0

这不允许他为'PermittedModuls'中的每个项目执行某些操作,这是他需求的一部分。 – Servy

+0

@Servy它在哪里说的? OP询问*“我正在尝试构建一个linq查询,以便根据当前用户的权限获取所有具有每个模块的Forms的Modules ......什么是在单个LINQ中获得结果的最有效方法查询“*。 – James

+0

这样他就可以完成他在给定的代码片段中描述的内容。他已经表明,除了获取表单外,他还在用'module'做一些事情。你的代码不允许这样做。 – Servy

0

目前,你的代码基本上你想要做什么,只是要表明Forms应该急切地填充每个项目,当你执行原来的查询,而不是懒洋洋地进行N往返得到每个模块的表格数据。要做到这一点,你使用Include

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

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

包含不是问题,我只想获取允许用户看到的表单,具体取决于他的权限 – user3041845

+0

@ user3041845因此,您要说的是,您所问的问题与您的问题无关想?你的问题根本没有提及任何有关权限的问题。 – Servy

+1

@Seivy **取决于当前用户的权限** – user3041845