如何将此查询从 sql 转换为 linq-to-entities

How to convert this query from sql to linq-to-entities

如何将以下查询从 sql(Oracle) 转换为 linq-to-entities:

select * FROM ActivityPromptText where ActivityId = 8 
         and ProcessTypeId = 1 and ProcessId is null

当我编写此 c# 时,它返回 null,而同一查询在 sql 中返回结果。 Linq 查询是:

var text2 = this.context.ActivityPromptText
       .Where(pt => (pt.ActivityId == activityId && pt.ProcessTypeId == processType) 
                      && pt.ProcessId == null)
      .Include(pt => pt.Prompt).FirstOrDefault();

=========================

模型是:

[Table("ActivityPromptText")]
public class ActivityPromptText
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    [Column(Order = 1)]
    public int PromptTextId { get; set; }

    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    [Column(Order = 2)]
    public int ActivityId { get; set; }

    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    [Column(Order = 3)]
    public int ProcessTypeId { get; set; }

    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    [Column(Order = 4)]
    public int? ProcessId { get; set; }

    [ForeignKey("PromptTextId")]
    public virtual PromptText MbopPrompt { get; set; }
}

和:

[Table("PromptText")]
public class PromptText
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int PromptTextId { get; set; }

    public string PromptText { get; set; }

}

并且 DBContext 文件具有:

public 虚拟 DbSet ActivityPromptTexts { get;放; }

public 虚拟 DbSet PromptTexts { get;放; }

我认为问题出在您的 ProcessId 属性 的 Key 属性上。我认为键不能为空,它们真的是键还是索引?如果它们是索引并且您使用的是 EF6.1+:http://msdn.microsoft.com/en-us/data/jj591583.aspx#Index

也支持多列索引。