我是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”。
非常感谢您的帮助。
答案 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();