Ниже приведен довольно простой пример проблемы, которую мне нужно решить. Я использую 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();
должен вернуть Guy с Id 1
первым, так как свойство Feature.At
больше DateTime.Now
, а остальные должны быть отсортированы по убыванию Id
. Id 4
, Id 3
затем Id 1
.
К сожалению, этот пример работает, но проблема в том, что сначала он вернет те, у которых нет Feature class
(упорядочено по убыванию Id
свойство), то те, которые имеют Feature class
, где At
больше DateTime.Now
. Опять же, они упорядочены по свойству Until
правильно, но они должны быть сверху.
Любая помощь будет высоко ценится.