使用Linq从表中提取数据

时间:2014-07-09 15:59:44

标签: c# .net linq

我有一张桌子,如下图所示。我需要从表格中提取一个列表,根据国家/地区列出它。这个国家没有重复。因此,例如,中国只出现一次,其总薪资将被添加,其总债务将被添加,所有其他列将分别被添加。所以它应该如下所示:

Country --- Totay Pay---Total Debt--- NetAmount

China--     (3.1+4.2)B--- (2.0+2.0)B----(8+4)B

India--     

Russia---

如果我们可以使用LINQ表达式,我更愿意。我尝试过使用GroupBy和其他运营商,但无法理解。

Table of Data

1 个答案:

答案 0 :(得分:1)

GroupBy运算符是一个很好的方向 - 您应该按国家/地区分组并使用one of its overloads对其他值求和:

  

根据指定的键选择器函数对序列的元素进行分组,并从每个组及其键创建结果值。

假设数据如下:

var data = new List<Data>()
{
    new Data() { Country = "China", Index = 2, TotalPay = 3.1M, TotalDebt = 2.0M, NetAmount = 8.0M},
    new Data() { Country = "India", Index = 4, TotalPay = 2.1M, TotalDebt = 3.0M, NetAmount = 9.0M},
    new Data() { Country = "China", Index = 8, TotalPay = 5.1M, TotalDebt = 4.0M, NetAmount = 10.0M},
};

你可以写:

var results = data.GroupBy(x => x.Country, (key, elements) => new Data()
    {
        Country = key,
        Index = elements.Sum(v => v.Index),
        TotalPay = elements.Sum(v => v.TotalPay),
        TotalDebt = elements.Sum(v => v.TotalDebt),
        NetAmount = elements.Sum(v => v.NetAmount)
    });