2009-11-20 3 views
5

J'essaie d'obtenir une chaîne de date formatée directement à partir d'une expression de requête LINQ-to-Entities.Linq-to-Entities: Format Date dans l'expression de requête sélectionnée

nonBusinessDays = (from ac in db.AdminCalendar 
        where ac.DateTimeValue >= calendarStartDate && ac.DateTimeValue <= calendarEndDate && ac.IsBusinessDay == false 
        select ac.MonthValue + "/" + ac.DayOfMonth + "/" + ac.FullYear).ToList(); 

Mais, je reçois le message d'erreur folloinw: « Impossible de lancer le type 'System.Nullable`1' taper 'System.Object' LINQ to Entities prend uniquement en charge de coulée Entity Data Model types primitifs.. "

Existe-t-il un moyen de faire cela en plus d'itérer dans le jeu de résultats? Merci! Abe

Répondre

9

J'ai trouvé une solution de contournement:

nonBusinessDays = (from dt in 
          (from ac in db.AdminCalendar 
          where ac.DateTimeValue >= calendarStartDate && ac.DateTimeValue <= calendarEndDate && ac.IsBusinessDay == false 
          select ac.DateTimeValue).ToList() 
        select string.Format("{0:M/d/yyyy}", dt)).ToList(); 
+1

Le problème que vous rencontrez est que sa tentative de traduire ToString dans SQL valide pour exécuter sur le serveur - et ce qu'il ne parvient pas à faire. Les requêtes imbriquées signifient que vous séparez le .ToString qui ne peut pas être fait de la requête qui peut et donc cela fonctionne – Murph

+1

Merci! Cela a du sens maintenant; LINQ essaie de mapper la fonction à une fonction SQL qui n'existe pas. Ma solution de contournement consistait à obtenir d'abord les données dans une liste et à traiter la liste à partir de là. – Abe

+0

Le chargement paresseux est le coupable. –

0

Essayez de changer de sélection à utiliser ToString:

nonBusinessDays = (from ac in db.AdminCalendar 
        where ac.DateTimeValue >= calendarStartDate && ac.DateTimeValue <= calendarEndDate && ac.IsBusinessDay == false 
        select ac.DateTimeValue.ToString("MM/dd/yyyy")).ToList(); 
+0

Malheureusement, vous ne pouvez pas exécuter la méthode ToString non plus; voici l'exception que j'ai reçue: LINQ to Entities ne reconnaît pas la méthode 'System.String ToString (System.String)' de la méthode, et cette méthode ne peut pas être traduite dans une expression de magasin. – Abe