【问题标题】:Entity Framework: search for database entries with null columns实体框架:搜索具有空列的数据库条目
【发布时间】:2023-04-03 02:52:01
【问题描述】:

我有以下型号:

public class FactCache
{
    public int ID { get; set; }
    public DateTime MonthDate { get; set; }
    public string AttributeKey { get; set; }

    public decimal RawValue { get; set; }
    public decimal ManDayValue { get; set; }
    public decimal FTEValue { get; set; }

    public int? InputResourceID { get; set; }
    public int? PhaseID { get; set; }

    public virtual InputResources InputResource { get; set; }
    public virtual DimPhase Phase { get; set; }
}

正如您在上面看到的,InputResourceIDPhaseID 是可为空的可选字段。

我想编写一个查询来查找给定日期和AttributeKey 的第一个条目,其中PhaseIDInputResourceID 均为空。

我已经尝试了以下代码:

FactCache fact = db.FactCache.FirstOrDefault(
  a => a.InputResourceID == null
  && a.PhaseID == null
  && a.MonthDate == monthDate
  && a.AttributeKey == key);

但是,它返回一个空对象。编写上述查询的正确方法是什么?

我检查了数据库,确实有 PhaseIDInputResourceID 为空的条目。

【问题讨论】:

  • 看看this SO question,你用的是哪个版本的EF?
  • 请原谅一个明显的问题:如果删除 MonthDateAttributeKey 检查,它仍然返回 null 吗?
  • @SteveWilkes:是的,问题仍然存在
  • 我在数据库中喜欢一些奇怪的东西(我首先使用代码):Appart 来自InputResourceID 列,code first 添加了第二个InputResources_ID 列。它在配置上接缝约定不起作用(我将public virtual ICollection<FactCache> FactCache { get; set; } 添加到InputResources 模型中)不知道这是否有任何关系
  • @Andomar:我使用的是版本 4。您提供的链接使用的符号与我习惯的不同,这是否意味着上面的符号不能处理空值?

标签: c# linq entity-framework code-first


【解决方案1】:

不确定,但也许……

FactCache fact = db.FactCache.FirstOrDefault(
  a => false == a.InputResourceID.HasValue
  && false == a.PhaseID.HasValue
  && a.MonthDate == monthDate
  && a.AttributeKey == key);

【讨论】:

  • 是的,似乎有效。仍然希望我可以使用本机 C#null,但看起来我必须等到我的团队决定我们可以升级到 EF5。谢谢
【解决方案2】:

请注意,我很幸运能够运行 EF 版本 5 或更高版本,请尝试此处提出的解决方案:Call is failing with null parameter

【讨论】:

    猜你喜欢
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    相关资源
    最近更新 更多