相关疑难解决方法(0)

Linq中的分层数据 - 选项和性能

我有一些分层数据 - 每个条目都有一个id和一个(可空)父条目id.我想检索给定条目下树中的所有条目.这是在SQL Server 2005数据库中.我在C#3.5中使用LINQ to SQL查询它.

LINQ to SQL不直接支持公用表表达式.我的选择是使用几个LINQ查询在代码中汇编数据,或者在面向CTE的数据库上进行查看.

当数据量变大时,您认为哪个选项(或其他选项)会表现更好?Linq to SQL是否支持SQL Server 2008的HierarchyId类型

sql linq sql-server-2005 common-table-expression c#-3.0

12
推荐指数
3
解决办法
2万
查看次数

使用Entity Framework Fluent语法或内联语法编写递归CTE

我是SQL和实体框架(ADO.NET实体映射)中的新递归.我正在进行评论管理,我有一个Comments表,表包含列NewsID, CommentID, ParentCommentID, IndentLevel, CreatedTime.

我正在尝试获取特定新闻项目的评论列表,其中所有评论都是根据父母和创建时间下的孩子排列的,如下所示:

CommentID | time | ParentCommentID
Guid1     |  t1  | null
Guid4     |  t4  | Guid1
Guid2     |  t2  | null
Guid3     |  t3  | Guid2
Run Code Online (Sandbox Code Playgroud)

必须优先考虑子父母关系,然后是创建时间.

到目前为止我所倾向的是(来自互联网资源和之前的stackoverflow Q/A)

  • 如图所示,这些递归查询很慢.使用Entity Framework执行此操作甚至更慢.但它可以实现.
  • 因此,可以通过在SQL Server中创建存储过程并使用功能导入来调用它来完成.另一件事是在实体框架中使用Linq.
  • 在SQL Server中,它以此格式使用

SQL:

WITH cte_name ( column_name [,...n] ) 
AS 
( 
CTE_query_definition –- Anchor member is defined. 
UNION ALL 
CTE_query_definition –- Recursive member is defined referencing cte_name. 
) 
-- Statement using the CTE 
SELECT * 
FROM …
Run Code Online (Sandbox Code Playgroud)

c# linq sql-server entity-framework

12
推荐指数
2
解决办法
2万
查看次数