【问题标题】:Linq to entities if in select statement如果在 select 语句中,则 Linq 到实体
【发布时间】: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


【解决方案1】:

if (statoRic.OraDalle,2359)代替if (statoRic.OraDalle.HasValue,statoRic.OraDalle,2359)

这相当于 C# 的 null-coalescing-operator ??statoRic.OraDalle ?? 2359 这是similar question 的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-16
    • 2013-04-05
    • 1970-01-01
    • 2017-02-18
    相关资源
    最近更新 更多