2012-08-15 72 views
1

我有两列,“添加日期”和“修改日期”。Linq to SQL - 由两个柱子排序

我想订购所有产品的修改日期,但因为它可以为空我想在这种情况下添加日期。

var q = from c in db.Products 
       where c.UserID == UserID 
       orderby c.DateModified ?? c.DateAdded descending 
       select 
        new ManageProducts 
         { 
          ID = c.ID, 
          Image = c.Photo.PhotoFile, 
          Name = c.Name, 
          DateAdded = (DateTime) c.DateModified ?? c.DateAdded 
}; 

这给我一个错误的

DateAdded = (DateTime) c.DateModified ?? c.DateAdded 

Error

+0

'c.DateModified.Value'试试这个。 – 2012-08-15 12:41:35

+1

尝试用'DateAdded = c.DateModified.HasValue? c.DateModified.Value:c.DateAdded' – user1429080 2012-08-15 12:55:00

回答

1

尝试删除投(日期时间)在

DateAdded = (DateTime) c.DateModified ?? c.DateAdded 

我写的片段,并在精细

作品
var sample = new [] {new {Nul = (int?) 5, Val = 6}, 
        new {Nul = (int?) null, Val = 6}}; 

var res = from value in sample 
      orderby value.Nul ?? value.Val 
      select new {Val = value.Nul ?? value.Val}; 

只是为了确保:

Console.WriteLine (typeof(int) == res.ElementAt(0).Val.GetType()); //True 
Console.WriteLine (typeof(int?) == res.ElementAt(0).Val.GetType()); //False 
1

使用

DateAdded = c.DateModified.HasValue ? c.DateModified.Value : c.DateAdded 

你试图分配可为空的DateTime(c.DateModified)到非空的DateTime字段(DateAdded)。如果存在或使用其他值(你的情况c.DateAdded),你必须从可空属性取值。

+0

DateAdded = c.DateModified!= null? c.DateModified.Value:c.DateAdded.Value - 这工作正常 – 2012-08-15 13:24:00