C# 按两个日期字段排序,以较新的日期字段为准
我希望我的对象按最新日期排序,或者按更新日期排序,或者按创建日期排序,以较新的日期为准。下面代码的问题是,未更新的对象(为null)出现在底部C# 按两个日期字段排序,以较新的日期字段为准,c#,.net,linq,linq-to-sql,C#,.net,Linq,Linq To Sql,我希望我的对象按最新日期排序,或者按更新日期排序,或者按创建日期排序,以较新的日期为准。下面代码的问题是,未更新的对象(为null)出现在底部 public IQueryable<MyObject> GetMyObjects() { return from obj in _db.MyObjects orderby obj.UpdatedDate descending, obj.CreatedDate descending selec
public IQueryable<MyObject> GetMyObjects()
{
return from obj in _db.MyObjects
orderby obj.UpdatedDate descending, obj.CreatedDate descending
select obj;
}
public IQueryable GetMyObjects()
{
在_db.MyObjects中从obj返回
orderby obj.UpdatedDate递减,obj.CreatedDate递减
选择obj;
}
即使一个对象没有更新日期,如果这些对象的更新日期小于该对象的创建日期,它也应该出现在其他有更新日期的对象之前。我怎样才能做到这一点?基本上,我想按最新日期订购,并使用更新日期或创建日期,以较晚者为准
如何更改我的linq代码以实现这一点?谢谢 我用Northwind DB在LINQPad中尝试了这个查询,结果很好:
from o in Orders
orderby o.RequiredDate > o.ShippedDate ? o.RequiredDate : o.ShippedDate
select new
{
o.RequiredDate,
o.ShippedDate
}
我不知道我是否已经很好地理解了你的问题,但以下是我的解决方案:
return from myclass in classes
let updated = myclass.Updated ?? myclass.Created
orderby updated descending
select myclass;
使用名为MyClass
的类进行测试:
class MyClass
{
public DateTime? Updated { get; set; }
public DateTime Created { get; set; }
}
有了这些价值观:
MyClass[] classes =
{
new MyClass() { Created = DateTime.Now.AddDays(12)},
new MyClass() { Created = DateTime.Now.AddDays(-5), Updated = DateTime.Now.AddDays(3)},
new MyClass() { Created = DateTime.Now},
new MyClass() { Created = DateTime.Now.AddDays(2), Updated = DateTime.Now.AddDays(10)},
new MyClass() { Created = DateTime.Now},
new MyClass() { Created = DateTime.Now.AddDays(1), Updated = DateTime.Now.AddDays(1)},
new MyClass() { Created = DateTime.Now},
new MyClass() { Created = DateTime.Now.AddDays(20), Updated = DateTime.Now.AddDays(4)}
};
结果是:
Updated = null - Created = 22/03/2011
Updated = 20/03/2011 - Created = 12/03/2011
Updated = 14/03/2011 - Created = 30/03/2011
Updated = 13/03/2011 - Created = 05/03/2011
Updated = 11/03/2011 - Created = 11/03/2011
Updated = null - Created = 10/03/2011
Updated = null - Created = 10/03/2011
Updated = null - Created = 10/03/2011
@安德烈:看我的答案。生成的SQL看起来是正确的。谢谢伙计们…两个答案看起来对我都有效。谢谢你们,我现在使用AS-CII的答案,但我毫不怀疑这也会有效。请注意,这段代码假定
更新后的总是晚于创建的,这听起来应该是真的,但是……很公平,但从逻辑上讲,首先创建一个对象,然后更新它。所以我认为我的假设是可以接受的:)