我可能会使用UDF / CTE或(对于非常深的结构)使用手动执行相同操作的存储过程。
请注意,如果您可以更改架构,则可以将此类递归结构预先索引到索引树/范围树中,该树使您可以执行单个BETWEEN查询-
但树的维护成本很高(即查询变得便宜,但是插入/更新/删除变得昂贵,或者您需要延迟的计划任务)。
关于2-您只能
yield使用枚举中指定的类型(
Tin
IEnumerable<T>/
IEnumerator<T>)。
你可以
yield的
IEnumerable<Comment>,如果
该方法返回
IEnumerable<IEnumerable<Comment>>-这是否合理?
改进之处:
- 也许是使用CTE递归方法的 udf (用于保持可组合性,而不是存储过程)
- 使用
using
,因为DataContext
是IDisposable
…
所以:
using(var db = new MyDataContext() ) { }- LoadWith值得一试,但是我不确定我会不会有希望…
- 搜索的ID列表作为一个字段是有风险的-只要您不两次调用它,我想您就可以了…就我个人而言,我会在私有支持方法上使用一个参数…(即,将在递归调用之间列出,但不在公共API上列出)



