Codebeispiel:
Code: Select all
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
Elektronik
1
Zubehör
Erwartete Ausgabe:
Id
ProductCategories
1
["Electronics", "Accessories", null]
Tatsächliche Ausgabe – zwei OrderDto-Objekte:
Id
ProductCategories
1
["Elektronik", "Zubehör"]
1
[null]
- Die Verwendung von .AsSplitQuery() vor .SingleOrDefaultAsync() löst das Problem und gibt wie erwartet ein einzelnes Objekt zurück
- Das Problem tritt nur auf, wenn die Sammlung sowohl NULL- als auch Nicht-NULL-Werte enthält
- Warum Erstellt EF Core zwei separate Objekte, anstatt alle Werte in einer Liste zusammenzufassen? Und warum löst AsSplitQuery das Problem?
- Ist das eine bekannte Einschränkung/ein bekannter Fehler in EF Core 6?
Mobile version