2016-05-11 1 views
0

J'essaie de convertir un champ datetime en chaîne. Le message d'erreur que j'ai reçu est trouvé ci-dessous. Avez-vous déjà vu ça? Je ne reçois pas de solution. Comment puis-je résoudre cela s'il vous plaît?Conversion d'un champ date-heure en chaîne dans 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 ne reconnaît pas la méthode 'System.String ToString (System.DateTime)' méthode, et cette méthode ne peut pas être traduit dans une expression de magasin.

+0

Vous pouvez utiliser 'dt.StatusDate.ToString()' qui sera converti en expression. – vendettamit

Répondre

1

Une façon de le faire est d'interroger StatusDate la base de données, puis le convertir en chaîne en mémoire comme ceci:

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

Un grand merci à tout le monde. Cela fonctionne maintenant avec la solution ci-dessus. Appréciez-le. – user2320476

+0

Serai-je capable de couper le temps du code ci-dessus? – user2320476

+0

Oui. Je pense que vous pouvez le faire à la fois du côté de la base de données (il existe des fonctions spéciales qui traduisent en fonctions SQL (voir [DbFunctions] (https://msdn.microsoft.com/en-us/library/system.data.entity.dbfunctions (v = vs.113) .aspx))) et au niveau local en utilisant 'x.StatusDate.Date'. –

0

Utilisez cette

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

EF ne avoir une fonction de base de données correspondante pour Convert.ToString(), donc il crache cette erreur. La manière la plus simple serait de faire quelque chose comme ça, qui frappe la base de données d'abord pour obtenir la date, puis la convertit en une chaîne une fois qu'elle est en mémoire en tant que collection normale.

    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)}); 

Bien que je pourrais vous recommandons d'utiliser d.ToString() au lieu de convertir, d'autant plus que vous pouvez utiliser le formatage de chaînes et d'autres choses de cette façon. Vous pouvez également appliquer un .ToList() à la fin de la requête et le renvoyer, au lieu de le faire sur la ligne suivante.