2016-10-11 1 views
0

vergleichen Ich kämpfe für den Vergleich von Daten in MVC. Ich habe alle Wege ausprobiert, aber trotzdem ist nichts gut gelaufen. Scheint sehr seltsam.Kann nicht zwei Daten in LINQ

Dies ist meine Datetime-Textbox, die mit dem JQuery-Kalender verknüpft ist.

@Html.TextBoxFor(x => x.dateofAction, ViewBag.filterdateTime as string, new { @id = "dateofAction", @placeholder = "Date Of Action", @class = "form-control datepicker validate[required, custom[date,future[min]]]", style = "width:80%;height:20px;" }) 

Dies ist mein Modellfeld.

public DateTime? dateofAction { get; set; } 

Finaly das ist meine Abfrage

upld_id = (from c in db.ts_upld_doc where (c.upld_ModifiedDateTime).Value.Year == datemodified.Year select c.upld_docid).ToArray(); 

Ich schlug Haltepunkt und überprüft. Ich habe Werte wie folgt gefunden.

  • 11/10/2016 12:00:00 AM - im Lieferumfang enthaltenen Anwender Datum
  • 2016-10-11 13:52:53.583 - SQL-Tabelle (upld_ModifiedDateTime)

ich nur Tag, Datum, Monat wie der Vergleich, Jahr in vielerlei Hinsicht versucht, aber nichts für mich gearbeitet. Kann mir ein Experte sagen, warum ich dieses Problem habe? vielen Dank.

+0

Wahrscheinlich beide die Daten im gleichen Format sein. –

+1

Diese Frage scheint mir seltsam. Ich kann es nicht überprüfen, aber sollte nicht so etwas wie '(von c in db.ts_upld_doc where (c.upld_ModifiedDateTime.Value.Year == datemodified.Year) wählen Sie c.upld_docid). ToArray();'? – Pikoh

+0

Was versuchst du zu tun - vergleiche 'DateTime' Werte für das gleiche Datum (ignoriere die Zeit)? –

Antwort

1

ändern Sie die Abfrage, um den Wert zwischen Anfang und am Ende des Tages wählen

DateTime start = datemodified.Date; 
DateTime end = start.AddDays(1); 

upld_id = (from c in db.ts_upld_doc 
      where c.upld_ModifiedDateTime >= start && c.upld_ModifiedDateTime < end 
      select c.upld_docid).ToArray(); 

oder

upld_id = db.ts_upld_doc 
    .Where(c => where c.upld_ModifiedDateTime >= start && c.upld_ModifiedDateTime < end) 
    .Select(c => c.upld_docid); 
+0

Danke Stephen. Noch vergleichen meine Daten nicht. –

+0

Was meinst du? Wenn "Datum geändert" ist "11/10/2016 12: 00: 00", dann wird "Start" ist "11/10/2016 12: 00: 00" und "Ende" wird "12/10/2016 12: 00: 00' ('TT/MM/JJJJ' Format), so dass ein Datensatz mit' upld_ModifiedDateTime = 2016-10-11 13: 52: 53.583' ** ** zurückgegeben wird –

+0

Richtig stimme ich zu. Es wird nicht verglichen. –

0

Zum ersten Mal aus upld_ModifiedDateTime entfernen und dann DateTime.Compare Methode für den Vergleich zu tun, wie unten dargestellt:

upld_id = (from c in db.ts_upld_doc where 
     DateTime.Compare(
      new DateTime(c.upld_ModifiedDateTime.Year, c.upld_ModifiedDateTime.Month, c.upld_ModifiedDateTime.Day)) 
     ,datemodified) == 0 
     select c.upld_docid).ToArray(); 
+0

Danke dir. Unterer Fehler trifft. In LINQ to Entities werden nur parameterlose Konstruktoren und Initialisierer unterstützt. –

0

Sie solltenverwendenmit EF6.

var dateValue = datemodified.Date; 

var upld_id = (
    from c in db.ts_upld_doc 
    where DbFunctions.TruncateTime(c.upld_ModifiedDateTime) == dateValue 
    select c.upld_docid).ToArray(); 

Wenn Sie eine ältere Version von EF Verwendung verwenden EntityFunctions

var dateValue = datemodified.Date; 

var upld_id = (
    from c in db.ts_upld_doc 
    where EntityFunctions.TruncateTime(c.upld_ModifiedDateTime) == dateValue 
    select c.upld_docid).ToArray(); 
+0

Danke. Es funktioniert nicht –

0

Wo datemodified deklariert wird, und wie es seinen Wert bekommt?
Wenn datemodified über Ihre Aktionsmethode im Controller deklariert und festgelegt wurde, dann könnte der von Ihnen gewählte Parametername das Problem sein.

dies wird also nicht funktionieren:

// MVC ignores Form field 'dateofAction' because it expects 'datemodified'. 
[HttpPost] 
ActionResult Index(DateTime datemodified) { ... } 

Während dies funktionieren soll:

// MVC uses Form field 'dateofAction' to set parameter 'dateofAction'. 
[HttpPost] 
ActionResult Index(DateTime dateofAction) { ... }