我有这个linq查询
Dim chiamateAperte = From statoRic In
dbVulcano.StatoRic.Where(Function(s) s.RFStato >= 11 And s.RFStato <= 13 And s.Attuale = 1 And s.RFTecnico = rfTecnico)
From richiesta In
dbVulcano.Richieste.Where(Function(r) r.IDRic = statoRic.RFRic).DefaultIfEmpty()
From cliente In
dbVulcano.Clienti.Where(Function(c) c.IDCliente = richiesta.RFCliente).DefaultIfEmpty()
Select statoRic.ID, statoRic.RFRic, statoRic.RFStato, statoRic.Attuale, richiesta.Descr, cliente.RagSociale, statoRic.DataAss, statoRic.Data, dataf = If(statoRic.DataAss.HasValue, statoRic.DataAss, statoRic.Data), statoRic.OraDalle, statoRic.OraAlle
Order By dataf Descending, statoRic.OraDalle Ascending
它工作正常,但我想在“OraDalle”字段上添加订单条件。 OraDalle它是一种时间字段,但遗憾的是它在db上被定义为smallInt(我无法改变它),所以格式就像“800”一样说“八点钟”。该字段可以为null。 所以我试过这个:而不是statoRic.OraDalle:
orad=if (statoRic.OraDalle.HasValue,statoRic.OraDalle,2359)
然后
Order By dataf Descending, orad Ascending
但是它抛出了一个丑陋的错误:无法将系统nullable 1转换为'system.nullable'类型的系统对象。此上下文仅支持原始类型或枚举类型
然后我尝试了这个:
orad=statoRic.OraDalle.GetValueOrDefault(2359)
但它也会抛出一个错误:linq to entities无法识别方法'Int16 GetValueOrDefault(Int16)'
那么......我怎样才能实现我的目标?这整个混乱是为了获得按时间排序的列表,其中空时间值在底部(而不是在顶部,默认情况下)。谢谢大家!
答案 0 :(得分:0)
而不是if (statoRic.OraDalle.HasValue,statoRic.OraDalle,2359)
使用if (statoRic.OraDalle,2359)
这相当于C#的null-coalescing-operator ??
:
statoRic.OraDalle ?? 2359
这是similar question的解决方案。