C# 使用TakeWhile在linq中检查以前的值
我使用linq根据某些条件连接两个表,我有summary表和user表,在summary表中我有两列,一列是isPaid(bit),另一列是amount(decimal)。我需要检查isPaid列,以便在当前值金额列中添加上一个值金额列。如果isPaid为false,我需要将上一个金额列添加到当前金额列中,否则无需添加。 我试过这个问题C# 使用TakeWhile在linq中检查以前的值,c#,linq,C#,Linq,我使用linq根据某些条件连接两个表,我有summary表和user表,在summary表中我有两列,一列是isPaid(bit),另一列是amount(decimal)。我需要检查isPaid列,以便在当前值金额列中添加上一个值金额列。如果isPaid为false,我需要将上一个金额列添加到当前金额列中,否则无需添加。 我试过这个问题 var billData = (from summary in billingSummary join userData i
var billData = (from summary in billingSummary
join userData in user on summary.parentId equals userData.ParentId
select new MonthlyBilling
{
billAmount = summary.billamount.ToString(),
paymentAmount = billingSummary.TakeWhile(x => (x.ispaid == false) ? (x.billamount + summary.billamount) : summary.billamount).ToString(),
}).ToList();
但是在TakeWhile部分,我得到了一个名为CANNOT隐式地将DECIMAL类型转换为BOOL的错误。我知道错误的含义,但我从哪里得到这个错误?有什么想法吗?您的TakeWhile希望从以下表达式中得到一个布尔式:
x => (x.ispaid == false) ? (x.billamount + summary.billamount) : summary.billamount
该语句返回一个十进制值,这就是您出错的原因。我不完全清楚您想做什么,请购买隐式if语句,如果该语句试图将十进制值传递给TakeWhile,它需要一个bool。
TakeWhile
需要一个委托返回一个bool
来指示何时停止按顺序提取项目。那么我是否需要更改我的requirement@juharr的逻辑,而不是使用TakeWhile,以及其他选项?是的,尽管我不清楚您到底想做什么。您是否试图根据ispaid
的值对账单金额进行连续合计?如果您能向我们展示一些示例数据和预期结果,也许可以。是的,您是正确的,我想要基于ispaid的billamount总数如果您尝试进行连续合计,我会执行类似的操作:billingSummary.Where(x=>!x.ispaid).Aggregate((a,b)=>a.billamount+b.billamount)。出于您的目的,逻辑和选择可能需要更改。