我正在尝试构建一个linq查询,根据当前用户的权限获取具有每个模块的Forms的所有模块,因此我可以在用户登录时构建我的程序菜单。
从以下数据库结构中获取单个linq查询结果的最有效方法是什么? 所以我可以使用查询结果执行以下操作:
foreach (var module in PermittedModuls)
{
//do some stuff
.....
foreach(var form in module.Forms)
{
//do some stuff
.....
}
}
我已经有了一些"脏"解决方案,但我确信有更好的方法来做到这一点。
顺便说一句,我使用的是Entity Framework 6
编辑!!!:对不起,伙计们,我认为我的问题不明确。
我只想获得用户拥有权限的表单!!!
答案 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
}
}