2010-04-05 5 views
2

Je suis très confus.L'expression lambda ne compilera pas

J'ai cette expression lambda:

tvPatientPrecriptionsEntities.Sort((p1, p2) => 
    p1.MedicationStartDate 
     .Value 
     .CompareTo(p2.MedicationStartDate.Value)); 

Visual Studio ne compilera pas et se plaint de la syntaxe.

I converti l'expression de lamba à un délégué anonyme si:

tvPatientPrecriptionsEntities.Sort(
    delegate(PatientPrecriptionsEntity p1, PatientPrecriptionsEntity p2) 
    { 
     return p1.MedicationStartDate 
       .Value 
       .CompareTo(p2.MedicationStartDate.Value); 
    }); 

et il fonctionne très bien.

Le projet utilise .NET 3.5 et j'ai une référence à System.Linq.

+9

Quel message d'erreur avez-vous reçu? –

+3

Apparaît pour compiler bien pour moi. Quel type est tvPatientPrecriptionsEntities? (Et est-il correct de supposer que p1.MedicationStartDate est un datetime nullable? ("DateTime?" Qui est) – Jakob

Répondre

2

DateTime.CompareTo est surchargé. Essayez d'utiliser des types de paramètres explicites dans votre lambda:

(DateTime p1, DateTime p2) => ... 
+0

Ce ne sont pas DateTimes, mais plutôt une classe personnalisée ... –

+0

Ah, n'a pas lu ce 2ème exemple de près De toute façon, si PatientPrecriptionsEntity.CompareTo est surchargé, le même commentaire s'applique. –

1

Le code suivant compile bien pour moi. Peut-être devriez-vous préciser quelles différences significatives existent entre votre code et cet exemple simple pour déterminer la source du problème.

static void Main(string[] args) 
{ 
    PatientPrescriptionsEntity[] ppe = new PatientPrescriptionsEntity[] {}; 
    Array.Sort<PatientPrescriptionsEntity>(ppe, (p1, p2) => 
     p1.MedicationStartDate.Value.CompareTo(p2.MedicationStartDate.Value)); 
} 
... 
class PatientPrescriptionsEntity 
{ 
    public DateTime? MedicationStartDate; 
} 
Questions connexes