2009-05-19 5 views
1

J'ai un problème avec LINQ et j'espérais que quelqu'un pourrait m'expliquer pourquoi. J'ai ce code:Groupe par question dans Linq

 List<Spec> specs = GetSpecs(userObject, seasonID, partnershipID); 

     var query = from s in specs 
        where (DateTime)s.FinalApprovedDate != null 
        && !((DateTime)s.FinalApprovedDate).Equals(DateTime.Parse("1/1/1900 12:00:00 AM")) 
        group s by s.ForCompanyID into g 
        select new 
        { 
         Vendor = g.Key, 
         Avg = g.Average(s.FinalApprovedDate.Subtract((DateTime)s.Created_Date).Days) 
        }; 

Ce que je voudrais récupérer de cette requête est la différence moyenne en jours entre la Date de création et la Date d'approbation finale pour chaque entreprise représentée byt la ForCompanyID où les dates ne sont pas nulles ou '1/1/1900'. Mon problème est que je ne peux pas comprendre comment obtenir ces données à partir de cette requête. D'après ce que j'ai lu, je crois que c'est la syntaxe correcte, mais je reçois un "Le nom" n'existe pas dans le contexte actuel sur les valeurs s sous new.J'ai aussi essayé cela avec g ici, mais cela ne ont les valeurs soit Toutes les pensées

+0

Vous pouvez comparer à DateTime.MinValue au lieu de DateTime.Parse ("1/1/1900 12:00: 00 AM ") Selon la" saveur "LINQ utilisée, le Parse() peut être exécuté pour chaque comparaison d'élément – Lucas

+0

... et (DateTime) s.FinalApprovedDate ne sera jamais nul, DateTime est un type de valeur non nullable – Lucas

+0

1/1/1900 n'est pas DateTime.MinValue - il est probablement associé à t il DateTime minimum possible dans son logiciel de base de données. – mquander

Répondre

7

Essayez de changer l'avant-dernière ligne:.?

Avg = g.Average(s => s.FinalApprovedDate.Subtract((DateTime)s.Created_Date).Days) 
+2

+1 pour utiliser correctement l'avant-dernier. :) – Randolpho

+0

aura probablement besoin de jeter à la DateDime (à nouveau) à l'utilisation de Subtract() – Lucas

+0

merci de m'indiquer dans la bonne direction. Voici ce que je dois travailler pour moi: sélectionnez Nouveau { Vendor = g.Key, Moy = g.Average (s => ((DateTime) s.FinalApprovedDate - (DateTime) s.Created_Date) .jours }; – bechbd