LINQ to Entities - 获取每个(角色,功能组)的功能量

时间:2012-05-07 17:55:05

标签: entity-framework linq-to-entities

我是Linq to Entities的新手,并且不知道如何进行一次查询。

我的模特是:

public class Role 
{
    public int Id { get; set; }   

    public string Name { get; set; }

    public ICollection<AppFunction> AppFunctions { get; set; }
}


public class AppFunction 
{
    public int Id { get; set; }

    public string Name { get; set; }

    public int? ParentId { get; private set; }

    public ICollection<Role> Roles { get; set; }
}

所以我有角色和应用程序功能。每个角色都可以有许多相关的应用程序功能,每个应用程序功能都可以与很多角色相关联。所以角色和应用程序功能之间只有很多东西。

还有一个细微差别: 如果AppFunction.ParentId == null - 我将其视为一个类别。

否则它是一个具体的功能,属于其中一个类别。

我不确定它是否是一个很好的架构示例,但现在我的应用程序就是如此。

我想做一个这样的查询,它将返回下一个ViewModel的数据:

public class RoleCategoryViewModel
{
    public string RoleName { get; set; }

    public string CategoryName { get; set; }

    public int Count { get; set; }
}

说清楚:

              Role1    Role 2

Category 1    (3/7)    (0/7)    

Category 2    (1/2)    (2/2)

Category 3    (3/5)    (4/5)

这是我想在页面上向用户显示的表格。它是角色和功能类别的矩阵。在角色X和类别Y的交叉点处,存在与角色X相关联的类别Y的应用函数量。

例如,(角色1)和“类别1”交叉处的(3/7)表示“类别1”完全包含7个“子功能”,并且“类别1”中只有3个功能与“角色1”。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

首先,我们需要对您的ViewModel进行一些更改,如下所示:

public class RoleCategoryViewModel
{
    public string RoleName { get; set; }
    public string CategoryName { get; set; }
    public int RoleCount { get; set; }
    public int TotalRolesCount { get; set; }
}

然后是查询:

        var list = (from category in context.AppFunctions.Where(m => m.ParentId == null)
                   from role in category.Roles
                   select new RoleCategoryViewModel
                              {
                                      CategoryName = category.Name,
                                      RoleCount = role.AppFunctions.Count,
                                      TotalRolesCount = category.Roles.Count,
                                      RoleName = role.Name,
                              }).ToList();