无法将表单&System; System.Data.Entity.Infrastructure.DbRawSQLQuery <system.collections.generic.ienumerable <long>转换为&#39; long&#39;

时间:2016-06-15 09:34:52

标签: c# entity-framework

我无法将通过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

在我尝试将结果添加到列表的最后一行

注意:我正在运行的查询返回一个数字

的值

2 个答案:

答案 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);