Пример кода:
Код: Выделить всё
public async Task Get(int id)
{
var result = await _dbContext.Orders
.Where(o => o.Id == id)
.Select(o => new OrderDto
{
Id = o.Id,
ProductCategories = o.OrderItems
.Select(oi => oi.ProductCategory)
.Distinct()
.ToList()
})
.SingleOrDefaultAsync();
return result;
}
OrderId
ProductCategory
1
NULL
1
Электроника
1
Аксессуары
Ожидаемый результат:
Id
ProductCategories
1
["Электроника", "Аксессуары", null]
Фактический результат — два объекта OrderDto:
Id
ProductCategories
1
["Электроника", "Аксессуары"]
1
[null]
- Использование .AsSplitQuery() до того, как .SingleOrDefaultAsync() устранит проблему и вернет один объект, как ожидалось.
- Проблема возникает только в том случае, если коллекция содержит как NULL, так и не NULL значения
- Почему EF Core создает два отдельных объекта вместо объединения всех значений в один список? И почему AsSplitQuery разрешает эту проблему?
- Это известное ограничение/ошибка в EF Core 6?
Подробнее здесь: https://stackoverflow.com/questions/798 ... ll-and-non
Мобильная версия