Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否可以在单个查询中跟踪一系列外键引用?_C#_Linq To Sql_Linqpad - Fatal编程技术网

C# 是否可以在单个查询中跟踪一系列外键引用?

C# 是否可以在单个查询中跟踪一系列外键引用?,c#,linq-to-sql,linqpad,C#,Linq To Sql,Linqpad,我有一个包含两个(相关)表的数据库:Actions和Documents,我正在使用LINQ查询它 操作指向其输入文档,文档指向创建它的操作,因此Action.Document和Document.SourceAction 通过跟踪这些关系,我们得到了一个交替操作和文档的处理链 Final Document-> Last Action-> Middle Document-> First Action-> Source Document 当文档没有源操作时,它是原始源文档 我

我有一个包含两个(相关)表的数据库:
Actions
Documents
,我正在使用LINQ查询它

操作指向其输入文档,文档指向创建它的操作,因此
Action.Document
Document.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();
var actions=newlist();
var action=Actions.Where(a=>a.Id==1240.First();
while(action!=null){
动作。添加(动作);
action=action.Document!=null?action.Document.SourceAction:null;
}
actions.Dump();
此查询工作正常,但它当然会为每个操作触发SQL查询


有没有一种方法可以在一个LINQ查询中获取所有这些操作?

只有在将所有数据拉入内存的情况下,才能在一个查询中执行此操作。否则您应该进行大量查询。

谢谢。我希望能够避免这些多重查询。但是这个表往往会增加到数百万条记录,因此加载它也可能是不需要的。我想我总是可以根据行动的数量来选择一个策略。谢谢你的链接,这里肯定有很多有趣的东西。我一直在搜索“链”和“跟踪”,不知何故,我从未想到这可能是一个“层次结构”。