У меня есть ситуация, когда нужно сделать OrderBy для объекта Include.Вот как я пытался до сих пор
Customers query = null;
try
{
query = _context.Customers
.Include(x => x.CustomerStatus)
.ThenInclude(x => x.StatusNavigation)
.Select(x => new Customers()
{
Id = x.Id,
Address = x.Address,
Contact = x.Contact,
Name = x.Name,
CustomerStatus = new List<CustomerStatus>
{
x.CustomerStatus.OrderByDescending(y => y.Date).FirstOrDefault()
}
})
.FirstOrDefault(x => x.Id == 3);
}
catch (Exception ex)
{
throw;
}
Приведенный выше код успешно упорядочивает элемент include, но он не включает его дочернюю таблицу.Например: Customer включает CustomerStatus, но CustomerStatus не включает таблицы StatusNavigation.
Я даже пытался с этим, но ни один из них не может помочь мне
_context.Customers
.Include(x => x.CustomerStatus.OrderByDescending(y => y.Date).FirstOrDefault())
.ThenInclude(x => x.StatusNavigation).FirstOrDefault(x => x.Id == 3);
Что я делаю не так, пожалуйста, сообщите мне кого-нибудь
Даже я пытался таким образом
var query = _context.CustomerStatus
.GroupBy(x => x.CustomerId)
.Select(x => x.OrderByDescending(y => y.Date).FirstOrDefault())
.Include(x => x.StatusNavigation)
.Join(_context.Customers, first => first.CustomerId, second => second.Id, (first, second) => new Customers
{
Id = second.Id,
Name = second.Name,
Address = second.Address,
Contact = second.Contact,
CustomerStatus = new List<CustomerStatus> {
new CustomerStatus
{
Id = first.Id,
CustomerId = first.CustomerId,
Date = first.Date,
StatusNavigation = first.StatusNavigation
}
},
}).FirstOrDefault(x => x.Id == 3);
, но это попадало в базы данных 3 раза и фильтровало результат в памяти.Сначала выберите все данные из статуса клиента, затем из статуса, а затем из клиента, а затем отфильтруйте все данные в памяти.Есть ли другой эффективный способ сделать это ??
Это то, как я подготовился к классу сущностей