使用linq表达式返回多列和和

本文关键字:返回 linq 表达式 使用 | 更新日期: 2023-09-27 18:12:09

我需要使用lambda表达式返回两个字段。第一个是金额字段的总和,第二个是当前财政年度。下面是我写的代码,我如何包含CurrentFinancialYear?

var amount = dealingContext.vw_GetContribution
                           .Where(o => o.ContactID == contactId)
                           .Sum(o => o.Amount);
return new Contribution { Amount = amount ?? 0, CurrentFinancialYear =  };

使用linq表达式返回多列和和

按年份分组应该会有效果:

            from entry in ledger.Entries
            where entry.ContactID == contactId
            && entry.Time.Year == currentFinancialYear
            group entry by entry.Time.Year
            into g
            select new Contribution () 
            {
                Amount = g.ToList ().Sum (e => e.Amount),
                CurrentFinancialYear = g.Key
            };

UPDATE -只返回第一个/默认结果…

            (from entry in ledger.Entries
            where entry.ContactID == contactId
            && entry.Time.Year == currentFinancialYear
            group entry by entry.Time.Year
            into g
            select new Contribution () 
            {
                Amount = g.ToList ().Sum (e => e.Amount),
                CurrentFinancialYear = g.Key
            }).FirstOrDefault();

首先使用一个简单的select

var contribution = dealingContext.vw_GetContribution
                              .Where(o => o.ContactID == contactId).ToList();

它会给你一个类型为vw_GetContribution的列表

然后使用此列表中的groupby作为

var groupedContribution = contribution.GroupBy(b => b.CurrentFinancialYear).ToList();

现在您可以遍历或使用该列表作为

foreach(var obj in groupedContribution.SelectMany(result => result).ToList())
{
      var amount = obj.Amount;
      var Year = obj.CurrentFinancialYear;
}



在单行中,您可以使用

执行上述所有操作
var contList = context.vw_GetContribution
                           .Select(a => new { a.Amount, a.CurrentFinancialYear })
                           .GroupBy(b => b.CurrentFinancialYear)
                           .SelectMany(result => result).ToList();

我希望这将解决你的问题。

你可以试试这个吗:

var amount = dealingContext.vw_GetContribution
            .Where(o => o.ContactID == contactId)
            .GroupBy(o=> new { o.CurrentFinancialYear, o.Amount})
            .Select(group =>
                   new { 
                      year= group.Key.CurrentFinancialYear, 
                      sum= group.Sum(x=>x.Amount) 
                       });