LINQ查询具有递归关系的聚合计数

时间:2012-07-23 18:48:40

标签: linq linq-to-entities

抱歉,我想不出一个更好的头衔! :)

我有一个名为Process的表,它有一个递归关系来定义Process- * Subprocess

现在,每个流程都可以附加一个或多个指标:Process- * Metric

所以我的Process表看起来像:

PROCESS
-------
ID
PID (fkey on Process.ID)

我的指标表如下:

METRIC
------
ID
PID (fkey on Process.ID)

使用LINQ和EF,我可以构建一个返回以下总和的查询:

  • 与流程关联的指标计数
  • 与作为该进程的后代的所有子进程关联的度量标准的计数

如果可能的话,我正在寻找一种方法来返回此信息,只需一次调用数据库。

谢谢!

克里斯

1 个答案:

答案 0 :(得分:1)

基本上你有两种选择。

  1. 将两个表读入内存并在代码中处理结果。适合小型收藏。
  2. 使用递归CTE创建视图并在EF中映射该视图。加入那个观点。编写起来比较复杂,但性能最佳,特别是对于大型集合。