【问题标题】:Select objects from a collection with same property values从具有相同属性值的集合中选择对象
【发布时间】:2021-10-06 10:41:12
【问题描述】:

有没有一种简单的方法来选择具有相同 currencyId 的成员,以便我可以将它们彼此相加,或者如果每个 currencyId 都有,我是否需要做其他事情?

if(model.CurrencyId == -1)
        {
            resultModel.Add(new ReportModel
            {
                AccountName = "Sum",
                BalanceSum = resultModel.Where(q => q.CurrencyId == 1).Sum(q => q.Balance)

            });
        }
        else
        {
            resultModel.Add(new ReportModel
            {
                AccountName = "Sum",
                BalanceSum = resultModel.Sum(q => q.Balance)

            });
        }

【问题讨论】:

  • 为什么你有if(model.CurrencyId == -1),然后是.Where(q => q.CurrencyId == 1).? -1 和 1 是错字吗?另外你的预期输出是什么?
  • 听起来像你想要的resultModel.GroupBy(q => q.CurrencyId)
  • @Greg 不是错字,``` model.CurrencyId == -1 `` 是一个完全不相关的控件,我只想选择集合中具有相同 CurrencyId 和将它们相加。

标签: c# collections


【解决方案1】:

要获得每种货币的余额总和,您可以先执行groupBy,然后执行select & sum

例如:

var balanceSum = t.GroupBy(q => q.CurrencyId)
    .Select(q => q.Sum(x => x.Balance));

要将其添加到 resultModel,您可以执行以下操作:

var reportData = t.GroupBy(q => q.CurrencyId)
    .Select(q => new ReportModel()
    {
        AccountName = "Sum",
        BalanceSum = q.Sum(x => x.Balance)
    });

resultModel.AddRange(reportData);

如果数据只赋值给resultModel一次,那么你可以用equals代替AddRange。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-30
    • 1970-01-01
    • 2016-11-28
    • 2018-08-28
    相关资源
    最近更新 更多