jcs*_*nt0 3 c# datatable sum iif
这是我试图评估的表达式:
Sum(IIF(QUALITY<=9.0,1.0,0.0))
Run Code Online (Sandbox Code Playgroud)
问题是
string expr = "Sum(IIF(QUALITY<=9.0,1.0,0.0))";
dataTable.Compute(expr, "")
Run Code Online (Sandbox Code Playgroud)
抛出一个错误说
Syntax error in aggregate argument: Expecting a single column argument with possible 'Child' qualifier.
Run Code Online (Sandbox Code Playgroud)
主要的挑战是我无法手动重写表达式,因为它以 RDL 文件中的字符串形式出现在我的程序中,所以它最初看起来像
Sum(IIF(Fields!QUALITY.Value<=9.0,1.0,0.0))
Run Code Online (Sandbox Code Playgroud)
并且我的程序需要自动将其转换为一个字符串,该字符串在传递给dataTable.Compute(). 我从 Microsoft 的 Compute 方法文档中确定 C# 不喜欢“字段!” 或语法的“.Value”部分,通过删除它们,我可以使更简单的表达式正常工作;例如,这些语句都返回预期值:
dataTable.Compute("Sum(QUALITY)");
dataTable.Compute("Count(QUALITY)");
Run Code Online (Sandbox Code Playgroud)
有可能做我想做的事吗?我觉得我应该只需要在某个地方稍微改变语法才能让它工作,但我一直无法在互联网上找到答案,这让人非常沮丧。
以下是我迄今为止尝试过的一些方法,但无济于事:
Sum(IIF([QUALITY]<=9.0,1.0,0.0))
Sum(Convert(IIF(QUALITY<=9.0,1.0,0.0), 'System.Double'))
Sum(IIF(Convert(QUALITY, 'System.Double')<=9.0,1.0,0.0))
Run Code Online (Sandbox Code Playgroud)
执行此操作的一种方法可能是将聚合列添加到DataTable并将表达式设置为IIF(QUALITY<=9.0,1.0,0.0)。
dataTable.Columns.Add("AggregateColumn", typeof(double), "IIF(QUALITY<=9.0,1.0,0.0)");
Run Code Online (Sandbox Code Playgroud)
然后对聚合列求和或计数。
| 归档时间: |
|
| 查看次数: |
6942 次 |
| 最近记录: |