我想构建一个像这样的linq查询:
Double n = dtCurrentDateRows.AsEnumerable().Where(r => (String)r["DATE"] == "10/09/2013").Sum(r => (Double)r["CALLS"]);
这是我到目前为止写的:
string c = "CALLS";
string ymd= "2013-10-09";
string date = String.Format("'{0}'", DateTime.Parse(ymd).ToString("M/dd/yyyy"));
Double total = dtCurrentDateRows.AsEnumerable().Where(r => (String)r["DATE"] == date).Sum(r => (Double)r[c]);
请建议如何获取数据表列的总和?
编辑:我正在尝试计算" Calls"的总和。 coulmn where date is" 2013-10-09"。但我不知道如何在linq查询中传递它。
更新 我只是写了这一行,它的工作原理
string ymd =" 10/9/2013&#34 ;; //这来自数据库
string date = DateTime.Parse(ymd).ToString(" M / dd / yyyy");
Double sum = dtCurrentDateRows.AsEnumerable()。where(r =>(String)r [" DATE"] == date).Sum(r =>(Double)r [columnName] );
但是当列有一些空白值时,它会给出0.0。
任何人都可以建议我如何检查来电是否为空白,然后不要求所有数值相加。
答案 0 :(得分:0)
您可以像这样使用Compute()方法:
object sum = dtCurrentDateRows.Compute("Sum(CALLS)", string.Format(CultureInfo.InvariantCulture.DateTimeFormat,"date = #{0}#",YourDateVariable));
要立即使用双倍,而不是对象执行此操作:
double sum = (double)/*rest of expression like above*/;
答案 1 :(得分:0)
尝试此操作(注意:如果您的日期字段包含时间值,请在比较前使用EntityFunctions.TruncateTime()
将其删除)。
System.DateTime myDate = new System.DateTime(2013, 10, 9); //Year, Month, Date
var n = dtCurrentDateRows.AsEnumerable()
.Where(r => r.Field<System.DateTime>("DATE") == myDate)
.Sum(r=> r.Field<Double>("CALLES"));