2009-05-19 13 views
1

Ich habe ein Problem mit LINQ und ich hatte gehofft, jemand könnte mir erklären, warum. Ich habe diesen Code:Gruppe nach Frage in Linq

 List<Spec> specs = GetSpecs(userObject, seasonID, partnershipID); 

     var query = from s in specs 
        where (DateTime)s.FinalApprovedDate != null 
        && !((DateTime)s.FinalApprovedDate).Equals(DateTime.Parse("1/1/1900 12:00:00 AM")) 
        group s by s.ForCompanyID into g 
        select new 
        { 
         Vendor = g.Key, 
         Avg = g.Average(s.FinalApprovedDate.Subtract((DateTime)s.Created_Date).Days) 
        }; 

Was würde Ich mag von dieser Abfrage abzurufen ist die durchschnittliche Differenz in Tagen zwischen dem Datum der Registrierung und dem Abschluss Genehmigt Datum für jedes Unternehmen byt der ForCompanyID dargestellt, in dem die Daten nicht null sind oder "1/1/1900". Mein Problem ist, dass ich nicht herausfinden kann, wie man diese Daten von dieser Abfrage bekommt. Von dem, was ich gelesen habe, glaube ich, dass dies die richtige Syntax ist, aber ich bekomme ein "Der Name 's" existiert nicht im aktuellen Kontext auf den s-Werten unter new. Ich habe dies auch mit g hier versucht, aber das tut es nicht haben die beiden Werte Irgendwelche Gedanken

+0

vielleicht möchten Sie DateTime.MinValue statt DateTime.Parse ("1900.01.01 00.00 vergleichen: 00 AM "). Abhängig von der LINQ" Flavor ", die verwendet wird, kann die Parse() für jeden Artikel Vergleich ausgeführt werden. – Lucas

+0

... und (DateTime) s.FinalApprovedDate wird nie null, DateTime ist ein nicht-Nullwerttyp – Lucas

+0

1/1/1900 ist nicht DateTime.MinValue - es ist wahrscheinlich mit t verbunden er minimal mögliche DateTime in seiner Datenbanksoftware. – mquander

Antwort

7

Versuchen Sie, die vorletzte Zeile zu ändern.?

Avg = g.Average(s => s.FinalApprovedDate.Subtract((DateTime)s.Created_Date).Days) 
+2

+1 für die vorletzte korrekt verwenden. :) – Randolpho

+0

wird wohl am FinalApprovedDate zu DateTime (nochmal) umwandeln müssen, um Subtract() zu verwenden – Lucas

+0

Danke, dass du mich in die richtige Richtung weist. Hier ist, was ich für mich zu arbeiten habe: wählen neue { Vendor = g.Key, Avg = g.Average (s => ((Datetime) s.FinalApprovedDate - (Datetime) s.Created_Date) .Days) }; – bechbd