通过lambda表达式从两个或多个表中检索数据

时间:2016-05-14 12:40:02

标签: asp.net asp.net-mvc linq

我有两个表,EntityPayment

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);

使用此代码,我可以获得按货币分组的数据,但我无法总结。

提前致谢

2 个答案:

答案 0 :(得分: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) 
});

现在您有一个列举的货币及其各自的金额。

答案 1 :(得分: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)  
      };