遵循以下两个先前的答案并进行调整以获取所需的结果,我已经成功地在SQL Server
2008中模拟了Oracle CONNECT BY语句。但是如何在LINQ中做到这一点?
这是我正在使用虚拟数据库的示例:
CREATE TABLE Employee(
EmployeeID INT IDENTITY(1,1) PRIMARY KEY,
Department INT NOT NULL,
EmployeeName VARCHAR(40) NOT NULL,
PeckingOrder INT NOT NULL,
HigherDepartment INT NULL)
INSERT INTO Employee (Department,EmployeeName,PeckingOrder,HigherDepartment)
VALUES (1,'Bart',1,NULL),(2,'Homer',1,1),(2,'Marge',2,NULL),
(3,'Lisa',1,2),(3,'Maggie',2,2),(3,'Santas Helper',3,1)
EmployeeID Department EmployeeName PeckingOrder HigherDepartment
1 1 Bart 1 NULL
2 2 Homer 1 1
3 2 Marge 2 NULL
4 3 Lisa 1 2
5 3 Maggie 2 2
6 3 Santas Helper 3 1
这是用于返回heirachy的SQL:
WITH n(level, PeckingOrder, Department, EmployeeName, HigherDepartment) AS
(SELECT 1, PeckingOrder, Department, EmployeeName, HigherDepartment
FROM Test.dbo.Employee
WHERE Department = 3
UNION ALL
SELECT n.level + 1, nplus1.PeckingOrder, nplus1.Department, nplus1.EmployeeName, nplus1.HigherDepartment
FROM Test.dbo.Employee as nplus1
JOIN n ON n.HigherDepartment = nplus1.Department)
SELECT MAX(level) AS level, PeckingOrder, Department, EmployeeName, HigherDepartment
FROM n
GROUP BY PeckingOrder, Department, EmployeeName, HigherDepartment
ORDER BY MAX(level) DESC, PeckingOrder ASC
level PeckingOrder Department EmployeeName HigherDepartment
3 1 1 Bart NULL
2 1 2 Homer 1
2 2 2 Marge NULL
1 1 3 Lisa 2
1 2 3 Maggie 2
1 3 3 Santas Helper 1
您可以使用ExecuteQuery
:
class YourRow
{
public int level {get; set;}
public int PeckingOrder {get; set;}
...
}
using (var db = new LinqDataContext())
{
var list = db.ExecuteQuery<YourRow>(
@"
WITH n(level, PeckingOrder, Department, EmployeeName, HigherDepartment) AS
(SELECT 1, PeckingOrder, Department, EmployeeName, HigherDepartment
...
";
}
也许更好的做法是,创建一个包含查询的视图,然后使用LINQ从该视图读取。
免责声明: 这是一篇相当长的文章。我首先解释我正在处理的数据,以及我想用它做什么 然后,我详细介绍了我考虑过的三种可能的解决方案,因为我试着做作业(我发誓:])。我最后得到了一个“最佳猜测”,这是第一个解决方案的变体。 我的终极问题是:使用Cassandra解决我的问题的最明智的方法是什么?这是我的尝试之一,还是其他什么? 我正在寻求经验丰富的Cassandra用户的建议/反馈… 我的数据:< b
我有这样的层次结构: 因此,用户可以添加他的工作经验。此外,他还可以为特定的项目添加角色。 我想为用户id 1获取项目,但项目之间只有关系 获取用户 获得工作经验 获取角色 获取项目 因此,如果我有更多不同工作经验的角色,我就必须提出20个请求才能得到我的项目。这不是很有效率吗?我必须加载一些不必要的数据。。。 是否可以只创建endpoint:并按用户ID过滤它? 应该如何在API上管理它?对我来
问题内容: 我正在尝试呈现数据模型中 是否 有任何保存的数据。但我收到以下错误: 警告:尝试在其视图不在窗口层次结构中显示 相关代码: 我尝试过使用Google找到的其他解决方案,但均未成功。 问题答案: 此时,在代码中,视图控制器的视图仅已创建,尚未添加到任何视图层次结构中。如果您想尽快从该视图控制器中进行显示,则应确保最安全。
问题内容: 我正在努力提高性能,以证明我已经写过并且没有运气的概念证明。我认为这种方法可能有缺陷,但是我正在努力寻找另一种解决方案。我介绍了我可以找到的所有Ask Tom文章和论坛帖子。 我们正在运行Oracle 10g R2。 我们将项目按层次结构排列。数量是在关系上定义的。层次结构中有两种类型的对象:逻辑分组的程序集和代表实际项目的项目。因此,如果我们要代表一个完整的工具集,我们将有一个代表整
我打算将一个由多个单一java项目组成的旧Ant项目迁移到一个多模块maven项目。的所有库都存储在一个本地文件夹中。为了建立依赖关系管理,我想向父pom添加所有依赖关系。xml(依赖项管理部分),并尽我所能将正确的内容添加到子项(Java Maven项目),直到编译工作开始。 然后,我想通过使用“mvn依赖:树-X”来简化pom.xmls,看看我是否向单个Maven项目添加了一些不需要显式添加到
我想使用OWL API在本体中创建类的类层次结构,类似于在Protege等工具中加载本体时可能看到的情况。 有关如何执行此操作的示例可在此处找到:http://sourceforge.net/p/owlapi/mailman/message/27600103/。 正如您所看到的,使用OWL API似乎很难精确地再现Protege层次结构,我想知道是否有一个例子可以再现Protege的行为,或者是否