C# 无法隐式转换类型';系统Linq.IQueryable<;双倍?>';至';双倍';
我试图使用实体框架从数据库中获取一个double,但我得到一个异常,下面是我的代码C# 无法隐式转换类型';系统Linq.IQueryable<;双倍?>';至';双倍';,c#,type-conversion,nullable,C#,Type Conversion,Nullable,我试图使用实体框架从数据库中获取一个double,但我得到一个异常,下面是我的代码 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
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);
}
这段代码在最后一行生成一个异常
其他信息:不可能的“效应器取消类型转换”System.Data.Entity.Infrastructure.DbQuery1[System.Nullable
1[System.Double]]“en type”System.IConvertible”
我怎样才能更正这个问题呢?试试看
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
,这是所有可能的结果,但您只希望得到一个结果,因此FirstOrDefault
应该只得到一个结果。Select
意味着fx\u rate
将成为表的类型,是否希望First()
?你想得到什么?您已经选择了一个数值列表(整数?双精度?)。您是否特别想要其中一个值?平均值还是总和?谁将检查空值?FirstOrDefault如果找不到,则会给出null。我认为这不会编译,因为您传递给FirstOrDefault的表达式不是Func
我已经编辑过了。我看得不够仔细。现在应该可以了。