2017-04-10 3 views
0

Es ist eine Weile her, seit ich Entity Frameworks und LINQ verwendet habe. Ich versuche eine SQL-ähnliche Abfrage durchzuführen. Dies funktioniert in einer 1: n-Beziehung, die über einen Fremdschlüssel in der übergeordneten Tabelle definiert wird.LINQ enthält keine ähnliche Anweisung

myEntity.Where(me => me.relatedEntity.Name.Contains("a"); 

Dies führt richtig auf eine wie in SQL. Wenn ich jedoch eine Viele-zu-Viele-Beziehung über eine Junction-Tabelle abfrage, erstellt sie eine Gleichheitsanweisung in SQL.

var name = "bo"; 
myEntity.Where(me => me.Users.Select(u => u.Name).Contains(name)); 

Fehle ich etwas offensichtlich?

Dank

+0

Die zweite Version, die Sie überprüfen, ob eine Entität in der Sammlung von Namen enthält den Namen, der in der Tat ein gleich ist. Du solltest "me.Users.Any" (u => u.Name.Contains (name)) ' –

Antwort

1

Das ist richtig, in der ersten Abfrage ist die Quelle ein String und der zweite ist die Quelle eine Sammlung von Strings. Ich denke, was Sie suchen, ist dies:

var r=myEntity.Where(me => me.Users.Any(u => u.Name.Contains(name))); 

Wenn Sie als Bedingung wollen, dass alle Benutzer einige Bespannbild enthalten dann All Erweiterungsmethode statt Any verwenden.

+0

Danke, es war eine Weile – DavidB

+0

Gern geschehen, froh, dass ich helfen konnte;) – octavioccl

Verwandte Themen