我无法将通过SQL查询填充的变量添加到列表中。
List<long> TillsTotal = new List<long>();
string tillquery = string.Format("select Sum(Value) from valuemetrics where custid='{0} '
and metricname={1} ' and date>='{2}' and date<='{3}' and tillno={4}",
Cust, Metric, FromDate , ToDate, till);
var tillValue = item.Database.SqlQuery<IEnumerable<long>>(tillquery);
TillsTotal.Add(tillValue);
我收到错误
无法将表单
System.Data.Entity.Infrastructure.DbRawSQLQuery<System.Collections.Generic.Ienumerable<long>
转换为long
在我尝试将结果添加到列表的最后一行
注意:我正在运行的查询返回一个数字
的值答案 0 :(得分:3)
我不确定这是否可行,但你可以试试这个:
List<long> TillsTotal = new List<long>();
string tillquery = string.Format("select Sum(Value) from valuemetrics where custid='{0} '
and metricname={1} ' and date>='{2}' and date<='{3}' and tillno={4}",
Cust, Metric, FromDate , ToDate, till);
var tillValue = item.Database.SqlQuery<IEnumerable<long>>(tillquery).ToList();
TillsTotal.Add(tillValue.First());
tillValue
始终是一个列表,但是如果您的查询返回单个值或多个值。
答案 1 :(得分:2)
Database.SqlQuery<T>()
returns a DbRawSqlQuery<T>
,仅在枚举结果时执行查询。
您也无法将IEnumerable<T>
添加到List<T>
到Add()
(您可以通过AddRange()
)。
所以要立即解决这两个问题:
var tillsTotal = await tillValue.ToListAsync();
或者,使用非异步LINQ代码:
var tillsTotal = tillValue.ToList();
如果你确定这是一个标量函数,由于你没有分组,你也可以使用Single()
:
var thisTotal = tillValue.Single();
tillsTotal.Add(thisTotal);