在select子句linq中添加年份

时间:2014-10-06 05:59:49

标签: c# linq

 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年。有没有办法实现这个结果?我试图把这个代码行放在

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

但错误说无法转换为'System.DateTime?' “长”

2 个答案:

答案 0 :(得分:3)

ExpiredDate = o.OrderDate.AddYears(1)

此次调用不会更改原始o.OrderDate,AddYears会返回 new DateTime。

您的错误是调用构造函数的结果,当没有这样的构造函数时,该构造函数应该采用另一个DateTime对象。你不需要构造函数调用,所以只需省略它。

答案 1 :(得分:0)

我认为问题是DateTime()需要一个很长的地方,你给了另一个DateTime对象。检查DateTime的不同构造函数。 你可以简单地说

ExpiredDate = o.OrderDate.AddYears(1);