【问题标题】:LINQ error when selecting a float datatype value选择浮点数据类型值时出现 LINQ 错误
【发布时间】:2017-06-16 22:46:43
【问题描述】:

我知道有几篇关于上述主题的帖子。但我仍然不清楚为什么我在以下LINQ 查询中收到以下错误。 注意:在以下查询中,我也尝试了var fCost = ....,但仍然出现完全相同的错误。 错误Unable to cast object of type 'System.Double' to type 'System.Single'

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; }
   ....
   ....
}

更新

上面的错误信息有错别字,而不是'System.String'应该是'System.Single' 错误信息如下。这个错误一直存在:

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

【问题讨论】:

  • 错误是什么?还有SingleOrDefault如果序列中有多个元素,这个方法会抛出异常。
  • @OrthoHomeDefense 我在帖子中添加了错误消息。另外,如果序列中有多个元素,我认为错误不会是我描述的错误,对吗?
  • 如果你把float? fcost改成var fcostfcost的值是多少?以及每一步之后的空合并呢?
  • @Jonathan 我没有达到这一点,因为错误发生在该特定行 float? fCost = _context.Orders...... 是否我使用 float? fCost =....var fCost =...... 我不清楚你的第二部分题。我在上面的查询中也试过....Select(t =>t.cost ?? 0).SingleOrDefault(),但同样的错误
  • 对于空合并我的意思是像_context.Orders.Where(r => r.OrdID == 123)?.Select(t => t.cost)?.SingleOrDefault();

标签: c# linq asp.net-core entity-framework-core


【解决方案1】:

我刚刚尝试了以下方法,它成功了。 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
            }
        };
    }

【讨论】:

  • 您的示例有效。我需要深入挖掘我的代码或数据。
猜你喜欢
  • 1970-01-01
  • 2014-05-17
  • 1970-01-01
  • 2011-05-18
  • 1970-01-01
  • 2013-07-06
  • 2017-03-05
  • 2018-01-11
相关资源
最近更新 更多