如何使用 Linq 为 SelectMany 聚合两个以上的实体?

How to aggregate more than two entities using Linq for a SelectMany?

我有一个包含多个 table 的数据库,我正试图将它们 "flatten" 转换为另一个数据库中的一个 table。我可以使用 Entity Framework 仅使用两个 table(或实体)轻松地做到这一点,但尝试添加 3 个或更多会给我编译错误。一定有办法做到这一点,对吧?我觉得我没有正确格式化我的表情。请查看我是如何使用以下两个实体进行设置的:

var flatTable= DB1.MainTable.SelectMany(mt => DB1.SecondaryTable.Where(st => st.MainID == mt.MainID),  (mt, st) => new FlatTable
{
    MainID = mt.MainID,
    AgeLessThan1 = st.AgeLessThan1,
    Age1to4 = st.Age1to4,
    Age5to19 = st.Age5to19,
    Age20to49 = st.Age20to49,
    AgeGreaterThanEqual50 = st.AgeGreaterThanEqual50,
    AgeUnknown = st.AgeUnknown
}).ToList();

以上代码成功地从第一个数据库的两个 table 中获取数据,并创建新的聚合行以插入到另一个数据库的 "flat" table 中。我的问题是正在创建的这个实体 FlatTable 有更多的字段需要从其他 table 填充,我似乎无法在这段代码中添加这些字段。我问的是可能的,还是我必须在多个步骤中添加每个额外 table 的字段?

下面是将完成的聚合数据添加到第二个数据库上的新table的代码:

foreach (flatRow row in flatTable)
{
    T2.AddToFlatTable(row);
}
T2.SaveChanges();

无需查看任何其他代码或您的数据库结构,您应该能够使用联接而不是 SelectMany 来实现相同的目的。

from mainrow in DB1.MainTable
    join secondrow in DB1.SecondaryTable on mainrow.MainID equals secondrow.MainID
    join thirdrow in DB2.ThirdTable on mainrow.MainID equals thirdrow.MainID
select new FlatTable
{
    MainID = mainrow.MainID,
    AgeLessThan1 = secondrow.AgeLessThan1,
    Age1to4 = secondrow.Age1to4,
    Age5to19 = secondrow.Age5to19,
    Age20to49 = secondrow.Age20to49,
    AgeGreaterThanEqual50 = secondrow.AgeGreaterThanEqual50,
    AgeUnknown = secondrow.AgeUnknown,
    ThirdTableField = thirdrow.Field
    //etc
}