Wenn Sie alle wollen Produkte, die tatsächlich ihren aktuellen Benutzer passen CompanyID Sie es an die sich ändern müssen folgende:
var products = _dbContext.Set<Product>()Include(x=>x.Productmetadatas).
Where(x => x.CompanyId == LoggedInUser.CompanyId && x.Active &&
x.ProductMetadatas.Any(pm => pm.CompanyId == LoggedInUser.CompanyId)).ToList();
Wie Sie .Any erraten kann() prüft, ob jedes Element in der Liste entspricht Ihrem LINQ-Ausdruck und gibt einen booleschen Wert zurück. Damit ist dein Ausdruck gültig.
Bisher konnte es nicht funktionieren, weil .Where() eine Liste der Elemente zurückgibt.
EDIT:
In Ordnung, wie es wurde festgestellt, dass Sie die ProductMetdatas anpassen möchten, können Sie wie folgt vorgehen:
eine Erweiterung erstellen für IEnumerable<T>
:
public static void ForEach<T>(this IEnumerable<T> source, Action<T> action)
{
foreach(T item in source)
action(item);
}
Und dann passen Sie Ihren LINQ wie folgt an:
var products = _dbContext.Set<Product>()Include(x=>x.Productmetadatas).
Where(x => x.CompanyId == LoggedInUser.CompanyId && x.Active).
ForEach(x => x.ProductMetadatas = x.ProductMetadatas.
Where(pm => pm.CompanyId == LoggedInUser.CompanyId).ToList()).ToList();
Jetzt rufen Sie für jedes Element eine Funktion auf, die die ProductMetadaten filtert und die Eigenschaft Ihres Produkts für die gefilterten ProductMetadaten festlegt.
Und was ist dein Problem dabei? Welche Ergebnisse bekommst du und was hast du erwartet? – HimBromBeere
Möchten Sie nur Produkte, die über ProductMetaData verfügen, die mit der Firmen-ID übereinstimmen oder alle ProductMetedatas mit der Firmen-ID übereinstimmen? –