2016-05-11 9 views
0

Ich versuche, ein Datetime-Feld in eine Zeichenfolge zu konvertieren. Die Fehlermeldung, die ich bekommen habe, ist unten gefunden. Hast du das schon mal gesehen? Ich bekomme keine Lösung. Wie kann ich das bitte lösen?Konvertieren eines Datumsfelds in eine Zeichenfolge in linq

  public IEnumerable<SelectListItem> GetStatusDate(string strprojectId) 
        { 
         var queryResult = (from dt in _objContext.tbl_Project_Status_MSTR 
          where dt.ProjectID.Equals(strprojectId) 
          orderby dt.ProjectID 
          select new SelectListItem {Text = Convert.ToString(dt.StatusDate),Value = Convert.ToString(dt.StatusDate)}); 
         List<SelectListItem> objStatDate = queryResult.ToList(); 

         return objStatDate; 
        } 

LINQ to Entities erkennt nicht die Methode 'System.String ToString (System.DateTime)' Methode, und diese Methode nicht in einen Laden Ausdruck übersetzt werden kann.

+0

Sie können 'dt.StatusDate.ToString()' verwenden, das in Ausdruck konvertiert wird. – vendettamit

Antwort

1

Eine Möglichkeit, es zu tun ist StatusDate aus der Datenbank abfragen, und es dann im Speicher wie diese Zeichenfolge zu konvertieren:

var objStatDate = 
    (from dt in _objContext.tbl_Project_Status_MSTR 
    where dt.ProjectID.Equals(strprojectId) 
    orderby dt.ProjectID 
    select new {dt.StatusDate}) 
    .ToList() //Execute database query 
    .Select(x => 
     new SelectListItem 
     { 
      Text = Convert.ToString(x.StatusDate), //Convert data in memory 
      Value = Convert.ToString(x.StatusDate) 
     }) 
    .ToList(); 
+0

Vielen Dank an alle. Es funktioniert jetzt mit der obigen Lösung. Bin dankbar. – user2320476

+0

Kann ich die Zeit vom obigen Code abschneiden? – user2320476

+0

Ja. Ich denke, Sie können beides auf der Datenbankseite tun (es gibt spezielle Funktionen, die zu SQL-Funktionen übersetzen (siehe [DbFunctions] (https://msdn.microsoft.com/en-us/library/system.data.entity.dbfunctions) (v = vs.113) .aspx))) und auf der lokalen Seite mit 'x.StatusDate.Date'. –

0

verwenden

List<string> ListOfDateString = (from dt in ListOfDateTime let str=dt.ToString() select str).ToList(); 
0

EF nicht haben eine entsprechende Datenbankfunktion für Convert.ToString(), so spuckt es diesen Fehler aus.

Der einfachste Weg wäre, so etwas zu tun, das zuerst die Datenbank trifft, um nur das Datum zu erhalten, und dann in eine Zeichenkette umwandelt, sobald sie als normale Sammlung im Speicher ist.

    var queryResult = (from dt in _objContext.tbl_Project_Status_MSTR 
         where dt.ProjectID.Equals(strprojectId) 
         orderby dt.ProjectID 
         select dt.StatusDate) 
         .AsEnumerable() 
         .Select(d => new SelectListItem {Text = Convert.ToString(d),Value = Convert.ToString(d)}); 

Obwohl ich könnte statt convert mit d.ToString() empfehlen, vor allem, da Sie String-Formatierung und Sachen, die Art und Weise verwenden können. Sie könnten auch einfach eine .ToList() auf das Ende der Abfrage klopfen und diese zurückgeben, anstatt es in der nächsten Zeile zu tun.

Verwandte Themen