2009-05-23 3 views
0

Die folgende linq2sql Code verwendet wird mir viel Kopfschmerzen verursacht und ich hatte gehofft, jemandDer Versuch, max Datum von Tisch zu bekommen Linq2Sql

DateTime _maxRecordedDate = (from snapshot in _ctx.Usage_Snapshots 
             where snapshot.server_id == server_id 
             orderby snapshot.reported_on descending 
             select snapshot.reported_on).First().Value; 

Dieser Code funktioniert in LinqPad und aber kompiliert fein helfen könnte, wenn das Projekt läuft es a ‚angegebene Methode wird nicht unterstützt“

Wenn ich Wert nicht es mir folgende Fehlermeldung erhalten, verwenden oder gegossen.

**

Cannot implicitly convert type 'System.DateTime?' to 'System.DateTime'. An explicit conversion exists (are you missing a cast?)

**

+0

Nach vielen Suchen konnte ich feststellen, dass das Problem von der Verwendung von ADO.NET Data Services herrührt. Anscheinend verwenden sie eine begrenzte Teilmenge von Linq und es ist zur Zeit nicht möglich, Methoden wie Max, First, etc. zu verwenden. Bummmer – jdiaz

Antwort

1
DateTime? _maxRecordedDate = _ctx.Usage_Snapshots.Where(s => s.server_id == server_id).Max(d => d.reported_on); 
+0

Derselbe Fehler wie bei der Verwendung von First() Kann den Typ 'System.DateTime' nicht implizit konvertieren? zu "System.DateTime". Es gibt eine explizite Konvertierung (fehlt eine Besetzung?) – jdiaz

+0

Ja, der Typ, der zurückgegeben wird, ist DateTime? (Nullable ), weisen Sie es einfach dem richtigen Übereinstimmungstyp zu. –

1

Will es nicht zuerst(). Wert? Vielleicht nur Erste().

Ich freue mich auf this.

+0

, die First() alleine verwendet, verursacht eine DateTime? ! = DateTime-Fehler. – jdiaz

+0

Ja, also weise es einer DateTime zu? Variable oder verwenden Sie var _maxRecordedDate. –

0

Robert vorgesehen, einen besseren Weg, es zu tun, aber das Problem mit Ihrem Code ist, dass Sie .Wert fordern, und das wird im Zusammenhang mit SQL Server ausgeführt wird, so gibt es keine .Wert Operation, die sein kann, in SQL übersetzt. Sie müssten .ToList() aufrufen. First(). Value oder DateTime zuweisen ?. Da Sie .First(). ToList() ... nicht aufrufen können, da First() eine einzelne DateTime zurückgibt? Dann ist es besser, DateTime zuzuweisen, weil Sie nicht die gesamte Liste aus SQL zurückgeben wollen.

+0

gibt 'Angegebene Methode nicht unterstützt' zurück. Es scheint, dass alles, was am Ende der Auswahl hinzugefügt wird, einen Fehler verursacht – jdiaz

0

Nach vielen Suchen konnte ich feststellen, dass das Problem von der Verwendung von ADO.NET Data Services herrührt. Anscheinend verwenden sie eine begrenzte Teilmenge von Linq und es ist zur Zeit nicht möglich, Methoden wie Max, First, etc. zu verwenden. Bummme

+1

Sie haben ADO.NET Data Services in Ihrer Frage nicht erwähnt. Das hätte nichts mit Ihrer Fehlermeldung zu tun. Rufen Sie einfach .ToList(). Zuerst(). –

Verwandte Themen