C# 在linq中递归构建层次结构

C# 在linq中递归构建层次结构,c#,linq,recursion,C#,Linq,Recursion,我有以下场景:我需要显示一个列表,其中列出了与某个特定部件相关的所有传输,这些传输可以追溯到过去。转账将有一个“从”帐户和一个“到”帐户以及一个部件ID。我被提供部件ID和一个代表层次结构顶部的帐户ID。我希望递归地向后迭代,将“from”帐户id与另一个转账的“to”帐户id进行匹配。例如: 给定PartID 123和AccountID a1,我返回: 转让1(第123部分,至账户a1,从账户ID a2) 转让2(第123部分,至账户a2,从账户ID a3) 转让3(第123部分,至账户a3

我有以下场景:我需要显示一个列表,其中列出了与某个特定部件相关的所有传输,这些传输可以追溯到过去。转账将有一个“从”帐户和一个“到”帐户以及一个部件ID。我被提供部件ID和一个代表层次结构顶部的帐户ID。我希望递归地向后迭代,将“from”帐户id与另一个转账的“to”帐户id进行匹配。例如:

给定PartID 123和AccountID a1,我返回:

  • 转让1(第123部分,至账户a1,从账户ID a2)
  • 转让2(第123部分,至账户a2,从账户ID a3)
  • 转让3(第123部分,至账户a3,从账户ID a4)
  • 转让4(第123部分,至账户a3,从账户ID a5)
等等

问题在于,可以使用相同的ToAccount和不同于AccountId的多个传输


我可以用CTE在SQL中轻松地实现这一点,但现在这不是一个选项。有没有一种方法可以通过一个Linq查询来实现这一点,或者我必须在一个循环中进行多个调用?

您是否有足够小的数据集,只需在应用程序代码中处理整个问题,而不是查询?另外,您使用的是什么查询提供者/数据库?不幸的是,数据集非常庞大。这是一个通过实体框架访问的SQL Server数据库。正如我所提到的,最近的一次调用是递归地调用查询对象,获取当前“级别”上每个元素的子元素,但是代码非常难看,并且没有真正的性能。它必须是LINQ吗?或者它可以是C#中实现的任何方法吗?另外,如果您遵循@Servy的建议,您不必下拉所有数据,只需下拉属于给定
部分的所有
传输
,然后按正确顺序递归连接传输。是的,这绝对是一个选项。它不一定必须是Linq,但如果该功能是内置的或易于实现的,则更倾向于走这条路线。(涉及零件的转让范围仍然未知,但可能可以管理)