2014-10-31 102 views
18

用非常简单的代码挣扎着,这些代码在其他类中工作的代码不起作用。如果我删除GetValueOrDefault(),它将不会编译。另外我正在使用System.Linq。 我得到这个运行时错误:LINQ to Entities无法识别方法'System.DateTime GetValueOrDefault()'。有任何想法吗?LINQ to Entities无法识别方法'System.DateTime GetValueOrDefault()'

public List<AddressModel> GetAll(string customer_number) 
    {   
     addresses = (from a in db.ADDRESS 
         where a.CUSTOMER_NUMBER.Equals(customer_number) 
         select new AddressModel 
         { 
          Address_Id = a.ADDRESS_ID, 
          System_Id = a.SYSTEM_ID, 
          Customer_Number = a.CUSTOMER_NUMBER, 
          Address_Type = a.ADDRESS_TYPE, 
          Changed_On = a.CHANGED_ON.GetValueOrDefault(DateTime.MinValue), 
          Created_On = a.CREATED_ON.GetValueOrDefault(DateTime.MinValue), 
          Email = a.EMAIL 
         }).ToList(); 

     return addresses; 
    } 
+9

这是不是一个真正的副本...这个问题是关于如何解决该链接的问题只是讨论问题。过度热情的节制是让我不想问SO的问题。 – thepaulpage 2015-05-12 15:03:57

+1

下面的答案帮助了我。对于这个被认为是重复的问题的答案根本没有帮助我。 ToString()与GetValueOrDefault()不同。这些概念可能相似,但解决方案不可互换。因此,这根本不是重复的。 – 2015-07-22 15:08:22

回答

35

您应该能够使用Null Coalescing操作??

addresses = (from a in db.ADDRESS 
      where a.CUSTOMER_NUMBER.Equals(customer_number) 
      select new AddressModel 
      { 
       Address_Id = a.ADDRESS_ID, 
       System_Id = a.SYSTEM_ID, 
       Customer_Number = a.CUSTOMER_NUMBER, 
       Address_Type = a.ADDRESS_TYPE, 
       Changed_On = a.CHANGED_ON ?? DateTime.MinValue, 
       Created_On = a.CREATED_ON ?? DateTime.MinValue, 
       Email = a.EMAIL 
       }).ToList(); 
+0

+1;聪明。 LINQ to Entities确实允许运营商。 – BradleyDotNET 2014-10-31 22:43:27

+0

令人惊叹的是,这节省了我很多时间! – user2780436 2015-01-30 18:33:08

相关问题