Gibt es eine Methode in Linq, wo Sie SQL-Strings wie "... wo (a = 1) OR (a = 2)" erstellen können?"Or" Äquivalent in Linq Wo() Lambda-Ausdruck
Antwort
Sie können es auf jeden Fall tun, innerhalb einer Where-Klausel (Extension-Methode). Wenn Sie eine komplexe Abfrage dynamisch erstellen müssen, können Sie jedoch PredicateBuilder verwenden.
var query = collection.Where(c => c.A == 1 || c.B == 2);
Oder mit einem PredicateBuilder
var predicate = PredicateBuilder.False<Foo>();
predicate = predicate.Or(f => f.A == 1);
if (allowB)
{
predicate = predicate.Or(f => f.B == 1);
}
var query = collection.Where(predicate);
Schöne Verwendung der Prädikate! +1 :) –
Dies funktionierte großartig, wie ich meine Or abhängig von den Werten der eingehenden Parameter aufbauen musste - Super! – dadwithkids
Sehr cool. Es ist eine Schande, dass dies nicht als eine Funktion innerhalb von .NET als Standard enthalten ist. – maxp
Sie können die Standard-.NET Booleschen Operatoren in Ihrem Einzel where-Klausel verwenden:
MyDataSource.Where(data => data.a == 'a' || data.a == 'b')
Ich denke, das ist die beste und einfachste Antwort. – user1477388
Dies ist die einfachste Antwort. – Eranda
Eine Lösung könnte Dynamische Linq sein:
Sie verwenden die alle die gleiche Operatoren wie in normalem C# ===> || für „oder“ & & für „und“ usw.
var something = from s in mycollection
where s.something == 32 ||
s.somethingelse == 45
select s
Ich bevorzuge diese Methode, es sieht natürlicher aus – nXqd
in Ihrem .Where()
Aufruf verwenden den Standard Boolean 'Or' Operator, ||
.
var query = items.Where(item => (item == 1 || item == 2));
All Wo Anruf tut, ist ein boolescher Vergleich auf, was Sie wollen, so dass Sie es mit so viel bedingte Logik füllen können, wie Sie möchten.
Dies ist jetzt in .net eingebaut, nicht sicher, ob es vorher nicht war. Bei einer vorhandenen Linq-Abfrage können Sie eine where-Klausel hinzufügen, die ein Array von Strings (SearchStrings) akzeptiert, und überprüfen, ob eines von ihnen mit dem Objekt in der Sammlung übereinstimmt, die Sie suchen. Die Verwendung von ToLower() sorgt dafür, dass Sie die Groß-/Kleinschreibung in SQL-Abfragen vermeiden.
query.Where(i => SearchStrings.Any(s => i.ToLower().Contains(s.ToLower()));
Sie können das gleiche tun für ein ‚und‘ Prädikat durch alle Wörter in dem Array die Objektsammlung entsprechen.
query.Where(i => SearchStrings.All(s => i.ToLower().Contains(s.ToLower()));
In diesem Beispiel korreliert i in einer Sammlung für jedes Objekt, und s korreliert in der SearchStrings Array zu jeder Saite.
- 1. LINQ Wo mit AND OR Bedingung
- 2. Verwendung Wo Methode in Linq 2 Entities mit OR-Klausel
- 3. LINQ Join mit OR
- 4. Linq Äquivalent in Lambda
- 5. SQLAlchemy - INSERT OR REPLACE Äquivalent
- 6. LINQ - Wo nicht
- 7. Entity Framework: Äquivalent von INSERT OR IGNORE
- 8. Linq To Sql 'Where Or' -Operator
- 9. Wo Prädikate in LINQ
- 10. Linq - Wo(). Wo() ist UND oder ODER?
- 11. Linq Select-Anweisungen - Wo Not In
- 12. Wo Zustand Linq mit
- 13. LINQ: Punktnotation Äquivalent für JOIN
- 14. C# - LINQ-Anweisungen mit OR-Klauseln
- 15. Wie verketten Sie OR-Klauseln mit LINQ?
- 16. Äquivalent zu LINQ zu Ereignissen in Scala
- 17. JOIN und LEFT JOIN Äquivalent in LINQ
- 18. Wie OR-Operator dynamisch zu WHERE-Klausel in LINQ
- 19. LINQ Wo in der Sammlungsklausel
- 20. Hinzufügen von OR-Ausdrücken in einer Schleife in Linq
- 21. Linq C# wo Bedingungsliste
- 22. LINQ verschachtelt wo
- 23. Bedingte LINQ wo Anweisung?
- 24. LINQ wo Abfrage
- 25. C# LINQ to SQL-OR-Statement in JOIN
- 26. Probleme mit ANY und OR-Abfragen in Linq zu NHibernate
- 27. Dynamisch LINQ-Abfrage erstellen mit OR-Operator in VB
- 28. Lambda-Ausdruck für OR-Bedingung in Linq zu Entität
- 29. Wo in Abfrage mit Array in LINQ
- 30. Java Stream-Äquivalent von LINQ SelectMany()
Ich nehme an, Sie wissen, wie man '||' verwendet und etwas Dynamisches, wie 'a = a.where (Stunde => Stunde <20) will; wenn (Wochenende) a = a.wo (Stunde => Stunde> 6); '. Vielleicht möchten Sie das deutlicher machen ... – Kobi