2016-06-29 11 views
-1

Ich versuche, ein Datum in eine Zeichenfolge zu konvertieren, damit ich den eingegebenen Wert suchen kann. Ich verwende einen Lambda-Ausdruck und DateTime.ParseExact, da ich nur das eingegebene kurze Datum verwenden möchte.Wie nach Datum mit Entity Framework suchen?

Dies ist meine Verbindung zur Datenbank:

var devices = db.Devices 
      .Include(d => d.DeviceType) 
      .Include(d => d.ManufacturerModel) 
      .Include(d => d.ManufacturerModel.Manufacturer); 

und meine Suche

if (!String.IsNullOrEmpty(searchString5)) 
{ 
    devices = devices.Where(s => DateTime.ParseExact(s.DateReceived,'dd/MM/yyyy'); 
} 
+0

Und was ist das Problem, das Sie konfrontiert sind? – AlwaysAProgrammer

+0

'Where' nimmt ein _predicate_, das einen booleschen Wert zurückgeben muss. Meinst du, die Daten zu vergleichen, die zurückgegeben werden, oder möchten Sie nur Elemente, bei denen die Analyse erfolgreich ist? –

+1

Wenn Sie versuchen, ein Datum in eine Zeichenfolge zu konvertieren, warum versuchen Sie alles zu parsen? Rufen Sie 'ToString' einfach mit Ihrem Format an, sicher? Es ist ziemlich unklar, was Sie hier eigentlich machen wollen. –

Antwort

1

Sie nicht zwei Daten vergleichen kann ganz einfach, weil Sie noch Stunden, Minuten und Sekunden müssen vergleichen.

Stattdessen möchten Sie den Benutzer Bereiche auswählen lassen - Von Datum und Bis Datum.

Zum Beispiel

var query = db.Devices 
      .Include(d => d.DeviceType) 
      .Include(d => d.ManufacturerModel) 
      .Include(d => d.ManufacturerModel.Manufacturer); 

string fromDate = "1/15/2016", toDate = "1/30/2016"; 
    DateTime fromDateTime, toDateTime; 

if(!DateTime.TryParse(fromDate, out fromDateTime)) 
{ 
    // Make fromDateTime to Start of Day - 1/15/2016 12:00:00 AM 
    fromDateTime = fromDateTime.Date; 
    query = query.Where(x => x.Date >= fromDateTime); 
} 

if (!DateTime.TryParse(toDate, out toDateTime)) 
{ 
    // Make toDateTime to End of day - 1/30/2016 11:59:59 PM 
    toDateTime = toDateTime.Date.AddDays(1).AddTicks(-1); 
    query = query.Where(x => x.Date <= toDateTime); 
} 

var result = query.ToList(); 
0

Keine Strings verwenden. Lassen Sie den Rahmen das schwere Heben für Sie erledigen.

DateTime dt; 
if (DateTime.TryParse(searchString5, out dt)) { 
    qry = qry.Where(s => s.Fecha.Date == dt.Date); 
} else { 
    throw new Exception("Bad input"); 
} 

Die generierte SQL (in meinem Fall) ist wie folgt, was ziemlich gut ist.

-- Region Parameters 
DECLARE @p0 DateTime = '2016-03-19 00:00:00.000' 
-- EndRegion 
SELECT 
    ... 
FROM 
    ... 
WHERE CONVERT(DATE, [t0].[Fecha]) = @p0 

Hier ein Tipp: LINQPad verwenden, um Ihre Anfragen zu schreiben und zu analysieren. Es ist kostenlos (und die kostenpflichtige Version ist billig, aber es ist absurd mächtig und nützlich.)