簡體   English   中英

如何使用Linq為SelectMany聚合兩個以上的實體?

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

我有一個包含多個表的數據庫,我試圖將這些表“展平”到另一個數據庫的一個表中。 我可以僅使用兩個表(或實體)使用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();

在沒有看到任何其他代碼或數據庫結構的情況下,您應該能夠使用聯接而不是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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM