Ich möchte eine Abfrage mit EF Core ausführen, wo ich nach einer untergeordneten Entität filtern und auch Paging anwenden muss. Siehe mein (Beispiel) Datenmodell unten: Ich möchte alle Daten (Kunden, Bestellungen, Bestellinformationen und Produkte) abrufen. Ich habe einen Filter auf Order.OrderState anzuwenden und ich möchte nur die ersten 10 Einträge (Kunden)EF Core-Filterung + Paging mit untergeordneten Entitäten
Dies ist die LINQ-Abfrage Ich habe versucht:
var customers = await _ctx.Customer
.Include(c => c.Order.Where(o => o.OrderState == 0))
.ThenInclude(o => o.OrderDetail)
.ThenInclude(d => d.Product)
.Skip(0).Take(10)
.ToListAsync();
Bei der Ausführung dieser Abfrage ich die folgende Fehlermeldung erhalten: InvalidOperationException: Der Property-Ausdruck 'c => {von Order o in c.Order wo ([o] .OrderState == 0) select [o]}' ist nicht gültig. Der Ausdruck sollte einen Eigenschaftenzugriff darstellen: 't => t.MyProperty'. Weitere Informationen zu verwandten Daten einschließlich
Also habe ich versucht, eine weitere Abfrage:
var qry = from c in _ctx.Customer
join o in _ctx.Order on c.Id equals o.CustomerId
join d in _ctx.OrderDetail on o.Id equals d.OrderId
join p in _ctx.Product on d.ProductId equals p.Id
where o.OrderState == 0
select new { Customer = c, Order = o, OrderDetail = d, Product = p };
var customers = await qry.Skip(0).Take(10).ToListAsync();
Jetzt ist die Abfrage einen Fehler nicht erzeugen, aber das Ergebnis ist nicht das, was ich will. Aufgrund der 1-n-Beziehungen gibt diese Abfrage Kunden mehrfach im Ergebnis zurück, sodass ich die ersten 10 Kunden nicht erhalte.
Hat jemand eine bessere Abfrage, um die Ergebnisse zu erhalten, die ich will?
Dank Muhammad. Das Distinct wird auf die ganze Reihe angewendet, also Kunde, Auftrag, etc. Es sollte nur den Kunden unterscheiden, um das Ergebnis zu erhalten, das ich will, aber das ist nicht der Fall. – dennieku