【发布时间】:2015-12-15 10:04:57
【问题描述】:
如何将以下查询从 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 文件有:
公共虚拟 DbSet ActivityPromptTexts { get;放; }
公共虚拟 DbSet PromptTexts { get;放; }
【问题讨论】:
-
你有没有尝试过?
-
试过这个:var text2 = this.context.ActivityPromptText .Where(pt => pt.ActivityId == activityId && pt.ProcessTypeId == processType && pt.ProcessId == null) .Include(pt => pt.Prompt).FirstOrDefault();
-
好的,为什么在 Where 子句中有括号?在
ProcessTypeId和ProcessId之间?它改变了查询吗?像这样改变它并尝试:-.Where(pt => pt.ActivityId == activityId && pt.ProcessTypeId == processType && pt.ProcessId == null) -
@RahulSingh 括号没有任何作用。我认为问题出在他的模型中,因为查询看起来是正确的。你能展示一下
Prompt和ActivityPromptText的模型吗? -
公共虚拟 DbSet
ActivityPromptTexts { get;放; } 和公共虚拟 DbSet PromptTexts { get;放; }
标签: linq ef-code-first linq-to-entities entity-framework-6 oracle-sqldeveloper