使用null-coalescing operator ??时,LINQ
次查询后会抛出错误,如下所示。如果删除?? 0
部分,它可以正常工作。但是如果t.cost
为空,我需要显示0。我试图提出LINQ等效的T-SQL IsNull(...)
方法,如下所示。
T-SQL:
SELECT IsNuLL(cost,0) from Orders Where OrdId = 123
LINQ:
float? fCost = _context.Orders.Where(r => r.OrdId == 123).Select(t => t.cost ?? 0).SingleOrDefault();
LINQ错误:
Unable to cast object of type `'System.Double' to type 'System.Single`
注意:
VS2015
识别语法....Select(t => t.cost ?? 0)....
并且编译良好但在运行时抛出错误。此外;它还识别语法....Select(t => (t.cost ?? 0))....
,但会在其上引发相同的错误。
答案 0 :(得分:1)
您当前的疑问:
Single? cost = _context
.Orders
.Where( r => r.OrdId == 123 )
.Select( t => t.cost ?? 0 )
.SingleOrDefault();
可以改写为:
Single? cost = _context.
.Orders
.SingleOrDefault( r => r.OrdId == 123 )
?.Cost;
如果没有行cost
或null
(SQL NULL),则 r.OrderId == 123
将为r.Cost IS NULL
。请注意我在?.
之前使用.Cost
运算符。
答案 1 :(得分:0)
试试这个。
float? fCost = _context.Orders.Where(r => r.OrdId == 123).Select(t => new { cost = (t.cost == DBNull.value ? 0 : t.cost) }).SingleOrDefault();