选择float数据类型值时出现LINQ错误

时间:2017-06-16 22:46:44

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

我知道上面的主题有几篇帖子。但我仍然不清楚为什么我在以下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'`

1 个答案:

答案 0 :(得分:0)

我刚刚尝试了以下内容,并且成功了。 fcost1为null,fcost2为1,fcost3为null。那么也许它在你的背景下是什么?订单对象不是您认为的那样?

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