如何在我的IQueryable类上使用SelectMany?

时间:2016-01-27 12:05:06

标签: c# linq

我一直在努力这一天。

所以我的班级如下:

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来选择SupplierNameTurnOverValues。但是,我需要将这些值放入一个单独的类列表中,如下所示:

public class SupplierSummaryData {
    public string SupplierName { get; set; }
    public List<decimal> Values { get; set; }
}

我一直在寻找使用LINQ,但到目前为止我还没能做到。我知道这个问题非常具体,但我无处可去,如果您需要更多信息,请发表评论。

预期产出:

{"Test Supplier", {2,5}}, {"Test Supplier two", {5,6}}

1 个答案:

答案 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()
    });