【发布时间】:2017-03-07 02:32:48
【问题描述】:
我有这个 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”表示“八点钟”。该字段可以为空。 所以我尝试了这个,而不是 statoRic.OraDalle:
orad=if (statoRic.OraDalle.HasValue,statoRic.OraDalle,2359)
然后
Order By dataf Descending, orad Ascending
但它抛出了一个丑陋的错误:无法将系统可为空的 1 转换为“system.nullable”类型的系统对象。此上下文仅支持原始类型或枚举类型
然后我尝试了这个:
orad=statoRic.OraDalle.GetValueOrDefault(2359)
但它也会抛出类似的错误:linq to entity does not identify the method 'Int16 GetValueOrDefault(Int16)'
那么...我怎样才能实现我想要的呢?这整个混乱是得到一个按时间排序的列表,其中空时间值位于底部(默认情况下不在顶部)。谢谢大家!
【问题讨论】:
-
试试
if (statoRic.OraDalle,2359)。这应该等同于 C# 的statoRic.OraDalle ?? 2359,这是对 this 问题的公认答案。 -
如此简单!你是我的英雄! :-D
-
如果您愿意,可以接受我的回答
标签: sql vb.net entity-framework linq linq-to-entities