1

我在 db 中有一个带有 PK(id) - int、FK(ParentDepID) int 和 DepartmentName (Varchar) 的表。这是部门连接树。问题是 - 找到每个部门的第一级元素的数量 - 选择所有没有子部门的部门 - 选择所有有子部门的部门。我真的是 linq 的新手((帮助我解决这个问题,并推荐一些关于 sql - linq 的内容。谢谢。

4

1 回答 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 回答