2017-04-22 86 views
0

我有4個表,而不用任何FK別人是這樣的:多表連接和組通過LINQ的

表1:身份證,號碼,日期,價格

表2:身份證,號碼,日期,價格,Table1Number,Table1Date

表3:身份證,號碼,日期,價格,Table2Number,Table2Date

表4:身份證,號碼,日期,價格,Table3Number,Table3Date

我想這樣的輸出:

Table1.Number,Table1.Date,Table1.Price,

Table2.Number,Table2.Date,Table2.Price(總價格)

Table3.Number,Table3.Date,Table3.Price(總價格)

Table4.Number,Table4.Date,Table4.Price(總價格)

table1-table2是One-One關係,但table2-table3和table3-table4是One-Many。

我困惑地加入他們在Linq並得到任何表的總價!

+1

請表現出一定的模型和你已經嘗試了什麼。 SO有一個很好的文檔部分,其中包含連接的linq查詢示例 –

+0

表2,3,4中的SUM是否與其他表中的SUM相同或是否是單獨的? –

回答

0

這可能不是那麼有用。你可以做的是用LinqPad試一下查詢。通過這段代碼,我能夠得到4個表格並獲得不同表格的總數。 Table1和Table2的總和只是1條記錄的價格。 Table3的總和是屬於Table1和Table2的所有記錄的總和。 Table4有2個總和,因爲Table3與2個表4有關係。

如果您提供更多的細節,也許我可以幫助你。

void Main() 
    { 

    var tables4a = new List<Table4>(){new Table4{id=1, price=40}, new Table4{id=2, price=41}}; 
    var tables4b = new List<Table4>(){new Table4{id=1, price=50}, new Table4{id=2, price=51}}; 
    var tables3 = new List<Table3>(){new Table3{id=1, price=20, tables4= tables4a}, new Table3{id=2, price=21, tables4 = tables4b}}; 
    var tables2 = new List<Table2>() {new Table2(){id=1, price=5, tables3= tables3, table1= new Table1(){ 
    id = 1, price = 11 
    }}}; 


    var Total123 = tables2.Where(x=>x.id ==1) 
    .SelectMany(x=>x.tables3, (table2,b)=>new{ 
    table2 
    }) 
    .SelectMany(x=>x.table2.tables3, (table_2,table_3)=>new{ 
    table_2, 
    table_3 
    }) 
    .Select(v=> new { 
    SumTable1= v.table_2.table2.table1.price, 
    SumTable2= v.table_2.table2.price, 
    SumTable3 =v.table_2.table2.tables3.Sum(x=>x.price), 
    SumTable4= v.table_3.tables4.Sum(x=>x.price), 
     }) 
     .Distinct() 
    ; 

    Total123.Dump(); 
} 


public class Table1 
{ 
    public int id {get;set;} 
    public int price {get; set;} 
} 

public class Table2 
{ 
    public int id {get;set;} 
    public int price {get; set;} 
    public Table1 table1 {get; set;} 
    public List<Table3> tables3 {get; set;} 
} 

public class Table3 
{ 
    public int id {get;set;} 
    public int price {get; set;} 
    public List<Table4> tables4 {get; set;} 
} 

public class Table4 
{ 
    public int id {get;set;} 
    public int price {get; set;} 
} 

enter image description here