2016-10-20 1 views
1

Ich habe eine SQL-Abfrage, wenn ich es in SQL Server ausführen, funktioniert es wie erwartet. Jetzt will ich diese Abfrage mit Entity Framework verwenden, etwa so:ASP.NET Entity Framework SqlQuery funktioniert nicht

ViewBag.TimeSlots = dbTimeSlots.Data.SqlQuery("SELECT a.id, concat(a.dateSlot, ' - ', a.timeSlot) as dateTimeSlot, sum(IIF(b.dateSlot is null,0,1)) as counter FROM VIP_Preview_TimeSlots as a LEFT OUTER JOIN [CP-VIP-Preview] as b ON a.dateSlot = b.dateSlot AND a.timeSlot = b.timeSlot GROUP BY a.timeSlot, a.dateSlot, a.[order], a.id Having sum(IIF(b.dateSlot is null,0,1)) < 30 ORDER BY a.[order]").ToList(); 

Jedoch, wenn ich es laufen, ich diesen Fehler:

The data reader is incompatible with the specified ‘CP.Models.VIP_Preview_TimeSlots'. A member of the type, 'timeSlot', does not have a corresponding column in the data reader with the same name. 

Hier ist meine Klasse:

public class VIP_Preview_TimeSlots 
    { 
     public int id { get; set; } 
     [DisplayName("Time Slots")] 
     public string timeSlot { get; set; } 
     [DisplayName("Date Slots")] 
     public string dateSlot { get; set; } 
     public int order { get; set; } 
    } 

    public class VIPPreviewTimeSlots : DbContext 
    { 
     public DbSet<VIP_Preview_TimeSlots> Data { get; set; } 
    } 

Ich weiß wirklich nicht, warum das nicht funktioniert, die Abfrage funktioniert, ich weiß nicht, warum Entity Framework ein Problem damit hat, wie kann ich das beheben?

Auch wenn ich versuche, eine einfache Abfrage:

ViewBag.TimeSlots = dbTimeSlots.Data.SqlQuery("SELECT id, concat(dateSlot, ' - ', timeSlot) as dateTimeSlot FROM VIP_Preview_TimeSlots").ToList(); 

ich den gleichen Fehler.

Antwort

0

Ihre SQL-Abfrage nicht zurück dateSlot und timeSlot als einzelne Spalten, sondern verkettet sie zu dateSlot + ' - ' + timeSlot als dateTimeSlot.

Passen Sie Ihre SQL-Abfrage von

concat(a.dateSlot, ' - ', a.timeSlot) as dateTimeSlot 

zu:

a.dateSlot, a.timeSlot 

oder

Entfernen Sie Ihre timeSlot und dateSlot Eigenschaften und ersetzen sie durch eine dateTimeSlot Eigenschaft.

+0

ja die Verkettung ist die beabsichtigte Ausgabe – user979331

+0

Wenn ja, dann ist das Ihr Fehler, Entity Framework sucht nach 'timeSlot' und' dateSlot', nicht 'dateTimeSlot' – Enfyve

0

Sie haben id, dateTimeSlot und counter als Spalten von der Abfrage zurückgegeben, keine timeSlot.

0

Entity-Framework-Code sucht nach einer Zeitfenstereigenschaft, die in Ihrer Select-Abfrage fehlt.

Verwandte Themen