大佬教程收集整理的这篇文章主要介绍了使用Entity Framework Fluent语法或内联语法编写递归CTE,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
AFAIK在liNQ和EF中均不支持递归CTE。解决方案是将CTE作为视图公开。有关使用EF Code First和Migrations进行递归或分层查询的文章,介绍了如何使用EF Code First迁移来部署这种视图。
尝试通过进行递归客户端迭代来模拟CTE并不能扩展到大型数据集,并导致与服务器之间的交流。请注意,您的EF代码是如何IEnumerable
不返回的Iqueryable
,这意味着它将实现每个级别,然后将每个条目的下一个级别串联为一个单独的请求 。基于liNQ的解决方案将适用于条目数有限的浅层次结构(并且请注意,许多项目 可以
具有这种数据布局,用户帖子/答案是典型示例),但是在具有许多元素的深层次结构中会崩溃。
我对SQL和实体框架(ADO.NET实体映射)中的 递归
都是陌生的。我正在进行评论管理,其中有一个Comments
表,并且该表包含列NewsID,CommentID,ParentCommentID,IndentLevel,CreatedTime
。
我正在尝试获取特定新闻项目的评论列表,其中所有评论均根据父项和创建时间下的子项进行排列,如下所示:
CommentID | time | ParentCommentID
Guid1 | t1 | null
Guid4 | t4 | Guid1
Guid2 | t2 | null
Guid3 | t3 | Guid2
必须优先考虑子级父母关系,然后是创建的时间。
到目前为止,我所依靠的是(来自互联网资源和以前的stackoverflow Q / A)
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 cte_name
为此,我参考了我有这个主意的链接:https :
//stackoverflow.com/a/6225373/892788
但是我试图理解代码却徒劳。有人可以给我关于在Entity Framework中编写递归CTE的更好详细的解释吗?
private IEnumerable<NewsComment> ArrangeComments(IEnumerable<NewsComment> commentsList,String parentNewsComntID,int level)
{
Guid parentNewsCommentID;
if (parentNewsComntID != null)
{
parentNewsCommentID = new Guid(parentNewsComntID);
}
else
parentNewsCommentID = Guid.Empty;
return commentsList.Where(x => x.ParentCommentID == parentNewsCommentID).SELEctMany(x => new[] { x }.Concat(ArrangeComments(commentsList,x.NewsCommentID.ToString(),level + 1));
}
我在方法内部使用以下方法:
return ArrangeComments(commentList,null,0);
我已经尝试过了,但似乎一无所获。尽管有关于SQL递归的解释,但是Linq的示例较少,并且由于不那么熟悉,对我来说也很模糊。有人可以帮我理解Linq中的CTE递归很棒吗
提前致谢
以上是大佬教程为你收集整理的使用Entity Framework Fluent语法或内联语法编写递归CTE全部内容,希望文章能够帮你解决使用Entity Framework Fluent语法或内联语法编写递归CTE所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。