2016-05-14 34 views
-1

我有兩個表,EntityPayment通過lambda表達式檢索兩個或多個表的數據

Entity表:

EntityID EntityName Country Currency 
---------------------------------------- 
1   xyz   cou1  cur1 
2   abc   cou2  cur2 
3   efg   cou1  cur1 

Payment表:

PaymentID Amount EntityID 
----------------------------- 
    1   1000 1 
    2   3000 2 
    3   1000 1 

我想就得到Entity量的總和currency

currency Amount 
----------------- 
cur1  2000 
cur2  3000 

我的代碼

var data = db.Payment.GroupBy(x => x.Entity.Currency); 

有了這段代碼,我可以獲得按貨幣分組的數據,但是我無法總結它。提前

感謝

+0

你的意思是你想要的東西,如:'VAR金額= data.Select(GRP =>新{貨幣= grp.Key,總和= grp.Sum(P => p.Amount)});'? –

+0

你能給我一個完整的答案 – anand

回答

3

所以,你必須在你的數據上下文定義了兩個類:

class Entitiy 
{ 
    public int EntityID { get; set; } 
    public string EntityName { get; set; } 
    public string Country { get; set; } 
    public string Currency { get; set; } 
} 

class Payment 
{ 
    public int PaymentID { get; set; } 
    public double Amount { get; set; } 
    public int EntityID { get; set; } 
    public Entitiy Entity { get; set; } 
} 

後來在代碼中你已經創建了一個數據庫的情況下,可以通過這個模擬:

var db = new { Payment = new Payment[0] }; 

然後你用你的上面代碼中使用它

var data = db.Payment.GroupBy(x => x.Entity.Currency); 

並回答你的問題,你如何總結每一種貨幣,我的建議是:

var sums = data.Select(grp => new { 
    Currency = grp.Key, 
    Sum = grp.Sum(p => p.Amount) 
}); 

現在你有貨幣和各自的總和的枚舉。

0

嘗試這種解決方案:

var sum = from p in db.Payment 
     from e in db.Entity.Where(e=>e.EntityID == p.EntityID).DefaultIfEmpty() 
     group e by e.Currency into Entities 
     select new 
     { 
     currency = Entities.Key, 
     Amount = Entities.Sum(s=>s.Amount) 
     };