我在 db 中有一个带有 PK(id) - int、FK(ParentDepID) int 和 DepartmentName (Varchar) 的表。这是部门连接树。问题是 - 找到每个部门的第一级元素的数量 - 选择所有没有子部门的部门 - 选择所有有子部门的部门。我真的是 linq 的新手((帮助我解决这个问题,并推荐一些关于 sql - linq 的内容。谢谢。
问问题
221 次
1 回答
0
我假设您知道如何在您的解决方案中使用 LINQ,如果不是这种情况,您需要查看一些入门教程,例如基本的 LINQ to SQL 场景以及如何将DataContext 连接到数据库。设置好 DataContext 后,您就可以开始编写LINQ Queries了。
您的第一个问题的查询将是:
var firstLevelQuery = from d in db.Departments
where d.ParentDepID == null
select d;
这会在您的表中找到所有没有 aParentDepID
并且因此是树上的根节点的部门。要计算其中有多少,请使用firstLevelQuery.Count();
. 您可以将它们作为一个使用,IQueryable<Department>
或者您可以将它们投射到一个列表中List<Department> firstLevelDepartments = firstLevelQuery.ToList();
。
查找作为父母的部门比较棘手,我们必须在这里使用多个查询。我们首先查找部门表中引用的所有 ID,然后查找与其中一个 ID 匹配的所有部门。
var innerQuery = from d in db.Departments select d.ParentDepID;
var parents = from p in db.Departments
where innerQuery.Contains<int>(p.ParentDepID)
select p;
您应该能够通过否定 Contains 语句来获取不是父母的记录:where !innerQuery.Contains<int>(m.GameTypeId)
于 2012-06-02T11:32:34.530 回答