Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.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# DataTable计算并选择给出错误结果的方法_C#_.net_Datatable_System.data - Fatal编程技术网

C# DataTable计算并选择给出错误结果的方法

C# DataTable计算并选择给出错误结果的方法,c#,.net,datatable,system.data,C#,.net,Datatable,System.data,我正在尝试对DataTable列进行条件求和。下面的代码没有给我正确的结果 var d = Convert.ToDouble(myDataTable.Compute("SUM(qty_o)", "itemmaster1_id=4636 AND batch=15789")) // returns 0 myDataTable.Select("itemmaster1_id=4636 AND batch=15789") // return 0 rows “myDataTable”有一条满足筛选条件“

我正在尝试对DataTable列进行条件求和。下面的代码没有给我正确的结果

var d = Convert.ToDouble(myDataTable.Compute("SUM(qty_o)", "itemmaster1_id=4636 AND batch=15789")) // returns 0

myDataTable.Select("itemmaster1_id=4636 AND batch=15789") // return 0 rows
“myDataTable”有一条满足筛选条件“itemmaster1_id=4636和batch=15789”的记录,我可以在DataTable Visualizer中调试时看到它

DataTable绑定到用于数据输入的DataViewGrid

我需要帮助

[编辑]我对此做了进一步的调试和研究。分享细节。 数据表中有3行。 当我运行myDataTable.Select()时,我得到3行。当我调用.Compute对不带过滤器表达式的列值求和时,它会给出正确的结果。 但当我尝试筛选(.Select)第三行时,得到0行。如果我尝试过滤前两行,它们工作得非常好。顺便提一下,第三行正在DataGridView中输入。因此,可能是有问题的数据行(第三行)未提交或其他原因。但是,我正在做所有必要的工作来将数据持久化/提交到datasource/datatable中,这可以通过.Select()调用和.Compute(“SUM(qty_o)”,null)调用返回正确的结果来证明。我很困惑

我还碰巧看到了这个打开的bug,还有这个。我祈祷这不是.NET4.0的问题

[2013年8月22日编辑]仍在努力找到一个体面的工作环境。请帮忙

[2014年7月16日编辑]再次遇到此问题。下面的数据表计算方法给了我错误的答案

double d = Convert.ToDouble(this.DataSourceAsDataTable.Compute("SUM(amount)", "jobtype=1"));
下面的LINQ查询可以完美地给出正确的答案

double n = this.DataSourceAsDataTable
                .AsEnumerable()
                .Where(r => ((r["jobtype"] != DBNull.Value) ? Convert.ToInt32(r["jobtype"]) : 0) == 1)
                .Sum(r => (r["amount"] != DBNull.Value) ? Convert.ToDouble(r["amount"]) : 0);

在添加了位于.Compute上方的代码行后,问题得到了解决

(this.DataSource as BindingSource).EndEdit();

显然,网格单元(此处的jobtype列)中的数据没有提交到底层数据源。EndEdit做到了这一点。

如何格式化查询,例如id和批处理列是数字还是字符串?我只知道
Compute(字符串表达式、字符串过滤器)
,您的示例是否编译过?具体是哪种方法?@Jonesy:无法使用您的建议,因为在我的例子中,计算的公式表达式和筛选表达式来自数据库。@HenkHolterman:id和batch列是数字列。我已经修复了代码(编译问题)。这段代码不是直接从我的程序中提取的,而是为这个问题再次编写的,因此错过了。