解析与linq麻烦的树桌

时间:2012-06-02 10:03:57

标签: c# database linq

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

1 个答案:

答案 0 :(得分:0)

我假设您知道如何在您的解决方案中使用LINQ,如果不是这样,您将需要查看一些启动教程,例如this basic LINQ to SQL scenariothis how to,以便将DataContext连接到数据库。设置DataContext后,即可开始编写LINQ Queries

您第一个问题的查询将是:

var firstLevelQuery =   from d in db.Departments 
                        where d.ParentDepID == null
                        select d;

这会查找表中没有ParentDepID的所有部门,因此它们是树上的根节点。要计算其中有多少,请使用firstLevelQuery.Count();。您可以使用IQueryable<Department>处理这些内容,也可以将其转换为List<Department> firstLevelDepartments = firstLevelQuery.ToList();列表。

找到父母的部门比较棘手,我们必须在这里使用多个查询。我们首先找到departments表中引用的所有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)