我有一个包含多个表的数据库,我试图将其“压扁”到另一个数据库的一个表中。我只能使用两个表(或实体)轻松地使用Entity Framework执行此操作,但尝试添加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();
上面的代码成功地从第一个数据库上的两个表中获取数据,并创建新的聚合行以插入到另一个数据库的“flat”表中。我的问题是,正在创建的这个实体FlatTable
还有更多的字段需要从其他表中填充,我似乎无法在这段代码中添加这些字段。是我可能要求的,还是我必须在多个步骤中添加每个附加表的字段?
下面是将完成的聚合数据添加到第二个数据库上的新表的代码:
foreach (flatRow row in flatTable)
{
T2.AddToFlatTable(row);
}
T2.SaveChanges();
答案 0 :(得分:1)
如果没有看到任何其他代码或数据库结构,您应该能够使用连接而不是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
}