使用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 = };
按年份分组应该会有效果:
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)
});