2017-06-16 109 views
1

我知道上述主题有几个帖子。但我仍然不清楚为什么我在以下LINQ查询中收到以下错误。 注意:在下面的查询中,我尝试了var fCost = ....,但仍然是完全相同的错误。 错误Unable to cast object of type 'System.Double' to type 'System.Single'选择float数据类型值时出现LINQ错误

float? fCost = _context.Orders.Where(r => r.OrdID == 123).Select(t => t.cost).SingleOrDefault(); 

型号:

public class Order 
{ 
    public int OrdID { get; set; } 
    public float? cost{ get; set; } 
    .... 
    .... 
} 

UPDATE

有在上述错误信息一个错字,代替'System.String'应该'System.Single'的错误信息如下。这个错误一直存在:

Unable to cast object of type `'System.Double' to type 'System.Single'` 
+0

什么是错误?如果序列中有多个元素,则'SingleOrDefault'也会引发异常。 –

+0

@OrthoHomeDefense我在帖子中添加了错误信息。另外,如果序列中有多个元素,那么我认为错误不会是我描述的错误,对吗? – nam

+0

如果你改变你的'浮动? fcost'到'var fcost','fcost'的值是什么?那么每一步之后的null coallesce怎么样? – Jonathan

回答

0

我只是试了下面,它成功了。 fcost1为空,fcost2为1,fcost3为空。所以也许这是你的情况? Order对象不是你认为的那样?

private void DoWork() 
    { 
     var orders = BuildOrders(); 
     float? fCost1 = orders.Where(r => r.OrdID == 1).Select(t => t.cost).SingleOrDefault(); 
     float? fCost2 = orders.Where(r => r.OrdID == 2).Select(t => t.cost).SingleOrDefault(); 
     float? fCost3 = orders.Where(r => r.OrdID == 3).Select(t => t.cost).SingleOrDefault(); 
    } 

    internal class Order 
    { 
     public int OrdID { get; set; } 
     public float? cost { get; set; } 
    } 

    private IEnumerable<Order> BuildOrders() 
    { 
     return new List<Order> 
     { 
      new Order 
      { 
       OrdID = 1, 
       cost = null 
      }, 
      new Order 
      { 
       OrdID = 2, 
       cost = 1 
      } 
     }; 
    } 
+0

您的示例工程。我需要深入了解我的代码或数据。 – nam

相关问题