2

Как преобразовать следующий запрос из SQL (Oracle) в Linq к сущности:Как преобразовать этот запрос из SQL в LINQ-к-субъектов

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 virtual DbSet ActivityPromptTexts {get; задавать; }

общедоступный виртуальный DbSet PromptTexts {get; задавать; }

+0

Вы пробовали что-нибудь? –

+0

Пробовал это: var text2 = this.context.ActivityPromptText .Where (pt => pt.ActivityId == activityId && pt.ProcessTypeId == processType && pt.ProcessId == null) .Include (pt => pt.Prompt). FirstOrDefault(); – shivani

+0

Хорошо, почему у вас есть круглые скобки в Where where? Между 'ProcessTypeId' и' ProcessId'? Он правильно меняет запрос? Измените его следующим образом: - '.Where (pt => pt.ActivityId == activityId && pt.ProcessTypeId == processType && pt.ProcessId == null)' –

ответ

0

Я думаю, что проблема заключается в атрибуте Key для вашего ProcessId. Ключи не могут быть нулевыми, я думаю, действительно ли они являются ключами или скорее индексами? Если они являются индексами, и вы используете EF6.1 +: http://msdn.microsoft.com/en-us/data/jj591583.aspx#Index

Поддерживаются также многоколоночные индексы.

+0

Спасибо, сработало. – shivani

+0

Приветствую вас, просто из любопытства, создал ли Entity framework этот код? У меня когда-то это было, что EF использовал ключевой атрибут вместо индекса –

+0

Нет, мы сначала используем EF-код. Мы создаем сущности для таблиц в базе данных. – shivani