2010-04-05 83 views
2

我很困惑。Lambda表达式不会编译

我有这样的lambda表达式:

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

Visual Studio将不会编译它,抱怨语法。

我转换兰巴表达一个匿名委托作为这样:

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

并能正常工作。

该项目使用.NET 3.5,我有一个参考System.Linq

+9

你得到了什么错误信息? – 2010-04-05 16:49:51

+3

似乎为我编译罚款。什么类型是tvPatientPrecriptionsEntities? (是否正确假设p1.MedicationStartDate是可以空的日期时间?(“DateTime?”即 – Jakob 2010-04-05 16:59:16

回答

2

DateTime.CompareTo被重载。尝试在你的lambda中使用显式参数类型:

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

)这些不是DateTimes,而是一个自定义类... – 2010-04-05 16:53:52

+0

啊,没有读那个第二个例子无论如何,如果PatientPrecriptionsEntity.CompareTo过载,则同样的评论适用。 – 2010-04-05 17:05:22

1

以下代码为我编译得很好。也许你应该缩小你的代码与这个简单的例子之间存在什么显着差异来确定问题的根源。

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