我有两个表,Entity
和Payment
。
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 :(得分: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)
};