我有这个查询
decimal? query = context.History
.Where(x => x.ItemId == Id
&& x.OtherFilter == IdOtherFilter
&& x.Fecha < Fecha)
.Select(x => x.Secuencia)
.Max();
我需要在Linq中执行此查询:
select max(Secuencia)
from History
where ItemId= 1406
and OtherFilter= 3
and Fecha < '20150922'
group by OtherFilter
我需要从符合条件的表中获取最大Secuencia,当条件返回数据时它可以正常工作,但是当没有数据与条件匹配时,Max()无法实现抛出 InvalidOperationException < /强>,
The cast to value type 'System.Decimal' failed because the materialized value is null. Either the result type's generic parameter or the query must use a nullable type.
如何避免?
我可以使用另一个Linq吗?
那些句子是等价的吗?如果没有我的linq有什么问题?答案 0 :(得分:2)
假设Secuencia
属性的类型为decimal
而非decimal?
,您应尝试向decimal?
添加强制转换,以便Max
返回如果没有值,则null
。
decimal? query = context.History
.Where(x => x.ItemId == Id
&& x.OtherFilter == IdOtherFilter
&& x.Fecha < Fecha)
.Select(x => (decimal?) x.Secuencia)
.Max();
或
decimal? query = context.History
.Where(x => x.ItemId == Id
&& x.OtherFilter == IdOtherFilter
&& x.Fecha < Fecha)
.Select(x => x.Secuencia)
.Cast<decimal?>()
.Max();
答案 1 :(得分:1)
进行以下修改以使其有效,在DefaultIfEmpty()
调用之前添加Max()
,这将处理空list
,您也可以指定自定义默认值,如0.0
,此处为null
,因为所选类型为nullable value type
,请检查DefaultIfEmpty
decimal? query = context.History
.Where(x => x.ItemId == Id
&& x.OtherFilter == IdOtherFilter
&& x.Fecha < Fecha)
.Select(x => x.Secuencia)
.DefaultIfEmpty()
.Max();