gpt4 book ai didi

c# - 创建新动态对象时的内联操作

转载 作者:太空宇宙 更新时间:2023-11-03 11:42:53 25 4
gpt4 key购买 nike

我试图在 LINQ 中向 DataGridview (winform) 提供一个单语句查询。以下行根据总和将记录值的总和分配给 Debt 或 Credit 成员。

交易1---*记录

var transactions = from t in this.account.transactions select new { 
Debt = t.records.Sum(x=>x.value) < 0 ? t.records.Sum(x=>x.value).ToString() : String.Empty,
Credit = t.records.Sum(x => x.value) > 0 ? t.records.Sum(x => x.value).ToString() : String.Empty
};

但我面临两个问题,这些问题很容易解决,但我正在寻找干净高效的东西。

  1. 如何避免多次调用 Sum 方法?有重构和减少调用量的想法吗?

  2. 我想添加一个名为 Balance 的新成员,它基本上是将之前的余额总和(在上一次迭代中)与当前余额相加。是否可以(并且干净地)直接在新声明中执行此操作?使用委托(delegate)?

问候

最佳答案

关于你的第一个问题,你可以这样做:

var transactions = from t in this.account.transactions
let sum = t.records.Sum(x => x.value)
select new
{
Debt = sum < 0 ? sum.ToString() : String.Empty,
Credit = sum > 0 ? sum.ToString() : String.Empty
};

关于您的第二个问题,我也对干净的解决方案很感兴趣。 LINQ 似乎并不设计用于处理单个记录以外的任何内容。你可以做

double balance = 0;
var transactions = from t in this.account.transactions
let sum = t.records.Sum(x => x.value)
let newBalance = balance += sum
select new
{
Debt = sum < 0 ? sum.ToString() : String.Empty,
Credit = sum > 0 ? sum.ToString() : String.Empty,
Balance = newBalance.ToString()
};

但我不会称之为“干净”。 =)

关于c# - 创建新动态对象时的内联操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4256018/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com