如何将此查询从 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
也支持多列索引。
如何将以下查询从 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
也支持多列索引。