我一直在努力这一天。
所以我的班级如下:
public class SupplierSummaryReport {
public string SupplierName { get; set; }
public decimal TurnOverValues { get; set; }
}
到目前为止,LINQ看起来像这样:
var data = (from i in _ctx.Invoices
where i.Turnover == true
where last5Years.Contains(i.InvoiceDate.Year)
select new {
Year = i.InvoiceDate.Year,
AccountName = i.AccountName,
Value = i.NetAmount_Home ?? 0
});
var y = data.GroupBy(r => new { r.Year, r.AccountName })
.Select(g => new APData.Audit.Models.ReportModels.SupplierSummaryReport {
SupplierName = g.Key.AccountName,
TurnOverValues = new List<decimal>{
g.Sum(r => r.Value)
}
});
这给了我这样的数据:
{2014, "Test Supplier", 1}, {2012, "Test Supplier", 2}, {2015, "Test Supplier two", 5}, {2011, "Test Supplier two", 9}
我需要使用.SelectMany
来选择SupplierName
和TurnOverValues
。但是,我需要将这些值放入一个单独的类列表中,如下所示:
public class SupplierSummaryData {
public string SupplierName { get; set; }
public List<decimal> Values { get; set; }
}
我一直在寻找使用LINQ,但到目前为止我还没能做到。我知道这个问题非常具体,但我无处可去,如果您需要更多信息,请发表评论。
预期产出:
{"Test Supplier", {2,5}}, {"Test Supplier two", {5,6}}
答案 0 :(得分:5)
您只需按AccountName
进行分组,然后为每个组选择供应商名称和值列表,如下所示:
var result =
data.GroupBy(r => r.AccountName)
.Select(g => new APData.Audit.Models.ReportModels.SupplierSummaryReport
{
SupplierName = g.Key,
TurnOverValues = g.Select(r => r.Value).ToList()
});