Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用TakeWhile在linq中检查以前的值_C#_Linq - Fatal编程技术网

C# 使用TakeWhile在linq中检查以前的值

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

我使用linq根据某些条件连接两个表,我有summary表和user表,在summary表中我有两列,一列是isPaid(bit),另一列是amount(decimal)。我需要检查isPaid列,以便在当前值金额列中添加上一个值金额列。如果isPaid为false,我需要将上一个金额列添加到当前金额列中,否则无需添加。 我试过这个问题

 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)。出于您的目的,逻辑和选择可能需要更改。