Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 按两个日期字段排序,以较新的日期字段为准_C#_.net_Linq_Linq To Sql - Fatal编程技术网

C# 按两个日期字段排序,以较新的日期字段为准

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

我希望我的对象按最新日期排序,或者按更新日期排序,或者按创建日期排序,以较新的日期为准。下面代码的问题是,未更新的对象(为null)出现在底部

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的答案,但我毫不怀疑这也会有效。请注意,这段代码假定
更新后的
总是晚于
创建的
,这听起来应该是真的,但是……很公平,但从逻辑上讲,首先创建一个对象,然后更新它。所以我认为我的假设是可以接受的:)