在你把它标记为复制之前,我做了大量的搜索,但它没有给出我的答案。我看过Recursive select via LINQ?,linq to sql recursive query和http://www.scip.be/index.php?Page=ArticlesNET18#AsHierarchy
我需要的是反向的第二和第三环节。但我不知道该怎么做。
请看下面的示例:
EmployeeId Name ManagerId
----------------------------
1 A null
2 B 1
3 C 1
4 D 3
5 E 2
6 F 5我需要的是,如果A正在登录,A将需要递归地查看他/她的下属。在本例中,A将看到每个人的详细信息。
所以:
我的问题是,如何创建递归的linqtosql?
我的当前解决方案是将所有员工记录读入列表,然后执行递归检查。如果我有很多员工,这似乎是浪费资源来加载所有的记录来列出。
有什么想法吗?
干杯
发布于 2018-07-25 12:30:05
最好的解决方案可能是在Sql中这样做。
如果不能修改Sql数据库,可以使用ExecuteQuery直接执行Sql (如
int employeeId = 1;
var query = this.ExecuteQuery<Employee>(
@"
; WITH cte
As
(
SELECT Employee.* FROM Employee WHERE EmployeeId = {0}
UNION All SELECT so.* FROM Employee so INNER JOIN cte ON cte.EmployeeID = so.ManagerId
)
SELECT * FROM cte
", new object[] { employeeId } ); 显然,您需要测试这个。
注意,如果您执行类似query.Select(a=> new { a.EmployeeID, a.Name})的操作,那么它仍然会在后台执行select *,其他列将被下载到客户端,然后被忽略,但是您可以创建一个具有您想要的字段的类,并更改cte返回这些列。
https://stackoverflow.com/questions/51494960
复制相似问题