【问题标题】:Cannot implicitly convert type 'System.Linq.IQueryable<double?>' to 'double'无法将类型“System.Linq.IQueryable<double?>”隐式转换为“double”
【发布时间】:2018-06-13 16:20:35
【问题描述】:

我正在尝试使用实体框架从数据库中获取双精度,但出现异常,下面是我的代码

public static double GetFxRate(DateTime dt)    
{
  DBEntities dbe = new DBEntities ();
  var fx_rate = dbe.MyTable
       .Where (s => s.Currency == "aaaaaaaaa" && s.Date == dt)
       .Select (s => (s.ask + s.bid)/2);
  return Convert.ToDouble(fx_rate);
}

这段代码在最后一行产生了一个异常

附加信息:Impossible d'effectuer un cast d'un object de type 'System.Data.Entity.Infrastructure.DbQuery1[System.Nullable1[System.Double]]' en type 'System.IConvertible'

请问我该如何纠正这个问题?

【问题讨论】:

  • Select 表示fx_rate 将成为您的表格类型,您想要First() 吗?
  • 你想得到什么?您选择了一个数值列表(整数?双精度数?)。您是否特别想要这些值之一?平均值还是总和?

标签: c# type-conversion nullable


【解决方案1】:

试试

public static double GetFxRate(DateTime dt)    
{
  DBEntities dbe = new DBEntities ();
var fx_rate = dbe.MyTable.Where (s => s.Currency == "aaaaaaaaa" && s.Date == dt).Select( s => (s.ask + s.bid)/2).FirstOrDefault();
return Convert.ToDouble(fx_rate);
}

问题是Select 返回一个IQueryable&lt;Double&gt;,这是所有可能的结果,但您只期待一个结果,所以FirstOrDefault 应该只能得到一个结果。

【讨论】:

  • 谁来检查 null ?如果未找到,FirstOrDefault 将给出 null
  • 我认为这不会编译,因为您传递给 FirstOrDefault 的表达式不是 Func&lt;T,bool&gt;
  • 我已经编辑过了。我看的不够仔细。它现在应该可以工作了。
猜你喜欢
  • 1970-01-01
  • 2014-01-07
  • 1970-01-01
  • 1970-01-01
  • 2019-08-18
  • 2020-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多