Код: Выделить всё
public class Driver
{
public Int32 Id { get; set; }
public String Name { get; set; }
public String Country { get; set; }
public IEnumerable Drives { get; set; }
public DateTime? FirstDriveDate => this.Drives.Select(o => o.Date)
.DefaultIfEmpty().Min();
public DateTime? LastDriveDate => this.Drives.Select(o => o.Date)
.DefaultIfEmpty().Max();
}
public class Drive
{
public Int32 Id { get; set; }
public DateTime Date { get; set; }
public Int32 Distance { get; set; }
}
Особенно потому, что в зависимости от ситуации я хочу, чтобы логика выполнялась в базе данных, а не сначала загружала все объекты в память и только потом применяла фильтр/сортировку.
Например:
Код: Выделить всё
var topNewUKDrivers = database.GetAll()
.Where(o => o.FirstDriveDate.Year == DateTime.Today.Year && o.Country == "UK")
.OrderBy(o => o.FirstDriveDate)
.ThenBy(o => o.Name).ToList()
Код: Выделить всё
var topNewUKDrivers = database.GetAll()
.Where(o => o.Drives
.Select(p => p.Date)
.DefaultIfEmpty().Min().Year == DateTime.Today.Year
&& o.Country == "UK")
.OrderBy(o => o.Drives.Select(p => p.Date)
.DefaultIfEmpty().Min())
.ThenBy(o => o.Name).ToList()
Код: Выделить всё
public static Expression FirstDriveDateEx =>
(driver) => driver.Drives.Select(o => o.Date)
.DefaultIfEmpty().Min();
Подробнее здесь: https://stackoverflow.com/questions/798 ... of-a-where
Мобильная версия