实体框架的复杂Linq查询

时间:2014-02-28 15:48:53

标签: c# sql linq entity-framework

我正在尝试构建一个linq查询,根据当前用户的权限获取具有每个模块的Forms的所有模块,因此我可以在用户登录时构建我的程序菜单。

从以下数据库结构中获取单个linq查询结果的最有效方法是什么? the following database structure? 所以我可以使用查询结果执行以下操作:

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


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

我已经有了一些"脏"解决方案,但我确信有更好的方法来做到这一点。

顺便说一句,我使用的是Entity Framework 6

编辑!!!:对不起,伙计们,我认为我的问题不明确。

我只想获得用户拥有权限的表单!!!

2 个答案:

答案 0 :(得分:1)

如果不了解有关如何计划过滤数据的详细信息,可以将代码简化为

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

这将为您提供每个模块上的所有表格(假设这是您想要的)。

答案 1 :(得分: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
   }
}