2014-10-06 47 views
0
var query = 
      from u in this.Manager.GroupRecipients 
      join sz in this.Manager.Sub 
      on u.OD_ID equals sz.OD_Id into grpjoin 

      join z in this.Manager.Users 
      on u.ID equals z.ID 

      join m in this.Manager.Order_Details1 
      on u.OD_ID equals m.OD_Id 

      join o in this.Manager.Orders 
      on m.OrderId equals o.OrderId 

      join p in this.Manager.Products 
      on m.ProductId equals p.ProductId 
      from sz in grpjoin.DefaultIfEmpty() 
      where u.CampaignGroupId == groupid 
      select new DTO 
      { 
       FirstName = z.First_Name, 
       LastName = z.Last_Name, 
       Email = z.Email, 
       ProductName = p.Name, 
       PurchaseDate = (DateTime)o.OrderDate, 
       ExpiredDate = //stuck 


      }; 

我有這段代碼,並且從select子句中,我可以通過使用鑄造Datetime到訂單日期來獲得購買日期。不過,我想將過期日期設爲購買後1年。有什麼方法可以實現結果嗎?我試圖把這個代碼行在select子句中添加年份linq

ExpiredDate = new DateTime(o.OrderDate).AddYears(1) 

,但一個錯誤,指出不能從轉換「System.DateTime的?」以「長」

+1

什麼是ExpiredDate類型? – Sajeetharan 2014-10-06 06:00:46

+0

它的DateTime @Sajeetharan – user2779065 2014-10-06 06:01:45

+0

@ user2779065:你確定,我期望它的類型是'long' ... – 2014-10-06 06:09:56

回答

3
ExpiredDate = o.OrderDate.AddYears(1) 

原來o.OrderDate不會受此調用改變,AddYears返回日期時間。

你的錯誤是調用一個構造函數的結果,當沒有這樣的構造函數存在時,該構造函數會佔用另一個DateTime對象。你不需要構造函數調用,所以只需省略它。

+0

它返回一個錯誤'System.Nullable < System.DateTime>'不包含'AddYears'的定義,並且沒有找到接受'System.Nullable '類型的第一個參數的擴展方法'AddYears'(你是否缺少using指令或程序集參考? – user2779065 2014-10-06 06:15:02

+0

@ user2779065所以你需要一種解決方法,但是我的水晶球是爲了維護而離開的,所以你需要解釋一下你想要什麼,如果OrderDate爲null,應該發生什麼? – nvoigt 2014-10-06 06:16:51

+0

我試圖設置expdatedate的值在購買日期後1年,Orderdate永遠不會爲null,實際上購買日期的值是這種格式2013-10-04T15:46:10。我不確定它是否是dateti我的格式。我仍然是這個領域的初學者 – user2779065 2014-10-06 06:19:52

0

我認爲問題是DateTime()需要一個長的地方,你已經給了另一個DateTime對象。檢查DateTime的不同構造函數。 你可以簡單地說

ExpiredDate = o.OrderDate.AddYears(1);