【发布时间】:2020-02-27 19:30:26
【问题描述】:
以下是我需要解决的问题的一个相当简单的示例。我正在使用EF Core 3.0 和LINQ,我需要按特定顺序从数据库中获取所有的人。首先,我需要所有具有Feature class 且Until 属性大于DateTime.Now 的人,由At 属性降序排列,然后由Id 属性从Guy class 降序排列。
public class Guy
{
public int Id {get;set;}
public Feature Feature {get;set;}
}
public class Feature
{
public int Id {get;set;}
public DateTime? At {get;set;}
public DateTime? Until {get;set;}
}
_dbcontext.Guys.Add(new Guy{Id = 1, Feature = new Feature {At = DateTime.Now.AddDays(-1), Until = DateTime.Now.AddDays(7)}})
_dbcontext.Guys.Add(new Guy{Id = 2, Feature = new Feature {At = DateTime.Now.AddDays(3), Until = DateTime.Now.AddDays(7)}})
_dbcontext.Guys.Add(new Guy{Id = 3})
_dbcontext.Guys.Add(new Guy{Id = 4})
例如_dbcontext.Guys.Include(x => x.Feature).OrderByDescending(x => x.Feature.Until > DateTime.Now ? x.Feature.At : DateTime.Now).ThenByDescending(x => x.Id).ToList();
应该首先返回带有Id 1 的Guy,因为Feature.At 属性大于DateTime.Now,其余的应该按Id 属性降序排序。 Id 4,
Id 3 然后Id 1。
不幸的是,这个例子有点工作,但问题是,首先它将返回没有Feature class 的那些(按Id 属性降序排列),然后是有Feature class 的那些At 大于 DateTime.Now。同样,这些是由 Until 属性正确排序的,但它们应该在顶部。
任何帮助将不胜感激。
【问题讨论】:
-
如果 Until 属性小于 DateTime.Now,它应该是结果集的一部分吗?
-
是的,它们都应该被返回,但是如果
Until属性小于DateTime.Now,它是由它的Id排序的。意思是首先所有Until大于DateTime.Now的人按他们的At属性降序排序,然后其余的人按他们的Id降序排序
标签: c# linq entity-framework-core