我在db中有一个带有PK(id) - int,FK(ParentDepID)int和DepartmentName(Varchar)的表。这是部门连接树。问题是 - 找到每个部门的第一级元素数量 - 选择所有没有子部门的部门 - 选择所有有子部门的部门。 我是linq的新手((帮我解决这个问题,并建议阅读有关sql的内容 - linq。谢谢。
答案 0 :(得分:0)
我假设您知道如何在您的解决方案中使用LINQ,如果不是这样,您将需要查看一些启动教程,例如this basic LINQ to SQL scenario和this 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)