C# LINQ到SQL层次结构问题

C# LINQ到SQL层次结构问题,c#,sql-server,linq,linq-to-sql,hierarchy,C#,Sql Server,Linq,Linq To Sql,Hierarchy,我从SQL Server中检索结果,如下所示: ProjectDetailID,ProjectID,ParentID,...,C1,C2,C3,... 其中C1表示=>companyOne,C2=>CompanyTwo。。。等等,动态地可以有“n”个公司 对于时间,我们只考虑3家公司,所以我得到: ProjectDetailID,ProjectID,ParentID,C1,C2,C3 10,1,0,NULL,NULL,NULL 10,2,1,NULL,NULL,NULL 10,3,2,90,N

我从SQL Server中检索结果,如下所示:

ProjectDetailID,ProjectID,ParentID,...,C1,C2,C3,...
其中C1表示=>companyOne,C2=>CompanyTwo。。。等等,动态地可以有“n”个公司

对于时间,我们只考虑3家公司,所以我得到:

ProjectDetailID,ProjectID,ParentID,C1,C2,C3
10,1,0,NULL,NULL,NULL
10,2,1,NULL,NULL,NULL
10,3,2,90,NULL,NULL
10,4,2,NULL,60,NULL
10,10,1,70,NULL,NULL
10,5,10,20,40,NULL
10,13,2,NULL,NULL,NULL
我想使用LINQ C从下面的结果中

ProjectDetailID,ProjectID,ParentID,C1,C2,C3
10,1,0,180,100,NULL
10,2,1,90,60,NULL
10,3,2,90,NULL,NULL
10,4,2,NULL,60,NULL
10,10,1,90,40,NULL
10,5,10,20,40,NULL
10,13,2,NULL,NULL,NULL
问题是,在父级,我对一家公司有空值,但在其子级,我有一些值,我不断添加这些值,并将其放在仅对应于该公司的父级中


我没有从哪里开始。请分享你的想法。我希望在LINQ中使用C实现这一点,我想我有一个解决您问题的方法

我假设Project类有一个构造函数,使我能够执行以下操作:

var projects = new List<Project>(new []
{
    new Project(10, 1, 0, null, null, null),
    new Project(10, 2, 1, null, null, null), 
    new Project(10, 3, 2, 90, null, null), 
    new Project(10, 4, 2, null, 60, null), 
    new Project(10, 10, 1, 70, null, null), 
    new Project(10, 5, 10, 20, 40, null), 
    new Project(10, 13, 2, null, null, null), 
});
因此,解决方案如下所示:

var traverse = projects.ToLookup(p => p.ParentID);

Func<Project, Func<Project, int?>, int?> rollup = null;

rollup = (p, f) =>
{
    var result = (f(p) ?? 0) + traverse[p.ProjectID].Sum(p2 => rollup(p2, f));
    return result == 0 ? (int?)null : result;
};

var query = 
    projects.Select(p =>
        new Project(
            p.ProjectDetailID,
            p.ProjectID,
            p.ParentID,
            rollup(p, p2 => p2.C1),
            rollup(p, p2 => p2.C2),
            rollup(p, p2 => p2.C3)));
这个查询的诀窍是rollup的递归定义。为了使匿名函数工作,必须使用两个语句声明和定义匿名函数,即定义不能内联


结果与问题中的第二组数据相匹配。希望这就是你想要的。

什么是关系。。。你需要更加具体。你需要什么关系?我只有一个需要操作的列表。应该创建第二个列表的逻辑是什么。。。对我来说,你还没有展示你想要做的事情。解决问题的一个简单方法是硬编码结果,因为你没有解释你想做什么。你和我在一起吗?那么,解释一下你的物体是什么样子的。如果存在不止一种类型的对象,您如何访问它们以及它们之间的关系。@Tomas Jansson:我会在一段时间内纠正我的问题。但简单地说,我只是将childElements数据汇总到父对象。不过,我还是会编辑我的问题,使其更加精确。