2016-04-15 8 views
0

ich diese SQL-Abfrage habenmeine Linq-Abfrage gibt nicht mir erwarteten Ergebnisse

SELECT SUM(DATEDIFF(MINUTE, InTime , OutTime)) /60 
FROM Attendance 
WHERE InTime BETWEEN '01-01-2016' AND '01-31-2016' 
AND Employee=63 

var AttendofEmp = (from ab in db.Attendances 
        where ab.InTime >= Convert.ToDateTime("01-01-2016") && 
          ab.InTime >= Convert.ToDateTime("01-31-2016") 
         select new { ab.InTime }); 

es funktioniert gut für SQL-Abfrage, aber wenn ich Linq-Abfrage verwendet für immer gleiche Ergebnisse es gibt Fehler
und Dank im Voraus ...

+0

Bitte den Fehler posten. –

+0

Was ist der Fehler? – Friyank

+0

LINQ to Entities erkennt die Methode 'System.DateTime ToDateTime (System.String)' nicht und diese Methode kann nicht in einen Geschäftsausdruck übersetzt werden. – akash

Antwort

1

Verwenden Sie new DateTime() für Ihre Datumskonstanten. Zusätzlich können Sie verwenden, um den SqlMethods.DateDiffMinute Minute Unterschied zu bekommen und .Sum() die Summe zu erhalten:

var AttendofEmp = 
    (from a in db.Attendances 
    where a.InTime >= new DateTime(2016, 1, 4) && a.InTime <= new DateTime(2016, 1, 31) 
    select SqlMethods.DateDiffMinute(a.InTime , a.OutTime) 
    ).Sum()/60; 
+0

es sagt SqlMethods.DateDiffMinute existiert nicht im aktuellen Kontext, ich bin neu dazu ... Entschuldigung für die Frage einfache Fragen.Ich habe bereits Namespace hinzugefügt System.Data – akash

+0

Versuchen Sie 'System.Data.Linq. SqlClient' –

+0

es funktioniert, aber gibt diesen Fehler – akash

1

konvertieren Convert.ToDateTime auf eine Variable und dann in der Abfrage verwenden.

1
var Date1 = Convert.ToDateTime("01-01-2016"); 
var Date2 = Convert.ToDateTime("01-31-2016") 

    var AttendofEmp = (from ab in db.Attendances 
         where ab.InTime >= Date1 && 
           ab.InTime >= Date2 
          select new { ab.InTime });