是否可以在单个查询中跟踪外键引用链?

时间:2013-01-11 22:10:08

标签: c# linq-to-sql linqpad

我有一个包含两个(相关)表的数据库:ActionsDocuments,并使用LINQ查询它。

操作指向其输入文档,文档指向创建它的操作,因此Action.DocumentDocument.SourceAction

通过回顾这些关系,我们得到了交替行动和文件的处理链。

Final Document-> Last Action-> Middle Document-> First Action-> Source Document

如果文档没有源操作,则它是原始源文档。

我在LINQPad中使用以下查询来收集这样一个链中的所有动作并输出它们:

var actions = new List<LINQPad.User.Action>();
var action = Actions.Where(a => a.Id == 1240).First();
while (action != null) {
    actions.Add(action);
    action = action.Document != null ? action.Document.SourceAction : null;
}
actions.Dump();

此查询工作正常,但它当然会为每个操作触发SQL查询。

有没有办法在单个LINQ查询中获取所有这些操作?

1 个答案:

答案 0 :(得分:2)

只有在将所有数据都存入内存时,才能在单个查询中执行此操作。否则你应该做很多查询。