1

我是 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 的交汇处,有大量来自类别 Y 的与角色 X 相关联的应用功能。

例如,“角色 1”和“类别 1”的交点处的 (3/7) 表示“类别 1”总共包含 7 个“子功能”,并且“类别 1”中只有 3 个功能与“角色 1”相关联”。

非常感谢您的帮助。

4

1 回答 1

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();
于 2012-06-12T12:24:01.017 回答