Frage Wie unterstützt Dynamic library (System.Linq.Dynamic) LIKE Operator?


Kann jeder Körper sagen, wie kann ich LIKE-Betreiber mit Microsoft Dynamic Expression API verwalten?

Ich muss mehr als einen Ausdruck in meiner Dynamik hinzufügen wo Abfrage

/*
var query =
db.Customers.
Where("CityName Like @0 or CityName Like @1", "London", "USA")
*/
var query =
db.Customers.
Where("CityName Like @0 or CityName Like @1%", "London", "USA")

tausend Dank


9
2018-01-05 01:06


Ursprung


Antworten:


Versuchen Sie einfach "CityName.Contains (@ 1)" zu verwenden, dies wird in das richtige Lambda konvertiert, da es sich um einen Methodenaufruf auf einen zugänglichen Typ handelt.

etwas wie:

var query =
db.Customers.
Where("CityName.Contains(@0) or CityName.Contains(@1)", "London", "USA")

Testen Sie es einfach mit der Beispielanwendung, die mit der dynamischen Bibliothek geliefert wird, und es generiert den LIKE-Operator


18
2018-01-05 02:08



Fügen Sie einfach weitere where-Klauseln hinzu

var query = db.Customers.Where(c=>c.CityName.contains("London"));
query = query.Where(c=>c.CityName.contains("USA"));
query = query.Where(c=>c.CityName.contains("Johannesburg"));

aber die obige Abfrage wird es erstellen:

Wählen Sie * vom Kunden wo CityName   wie "London" und CityName wie   "USA" usw.

Sie wollen

Wählen Sie * vom Kunden wo CityName   wie "London" oder CityName wie   "USA" usw.

So verwenden Sie Dynamic Created oder Anweisungen, die Sie verwenden können Prädikatbuilder Es gibt wirklich viel der Funktionalität dort, die Sie verwenden können ...

http://www.albahari.com/nutshell/predicatebuilder.aspx

var predicate = PredicateBuilder.False<Customer>();
predicate = predicate.Or(c=>c.CityName.Contains("London"));
predicate = predicate.Or(c=>c.CityName.Contains("USA"));
predicate = predicate.Or(c=>c.CityName.Contains("Johannesburg"));

3
2018-01-05 01:14



Dadurch wird die Verwendung von "Gefällt mir" in Integer-Feldern sichergestellt.

.Where (searchField + ".ToString (). Enthält (@ 0)", searchString);


3
2017-10-23 21:54



Sie können verwenden .StartsWith(),  .EndsWith() und .Contains() Das erzeugt LIKE SQL mit nachfolgenden, führenden und umgebenden Platzhaltern. Ich kenne keine Möglichkeit, eine Anweisung mit einem eingebetteten Platzhalter zu erzeugen.


2
2018-01-05 01:14



@ Jaime das ist was ich brauche, danke.

var query =   db.Kunden.   Wo ("CityName.Contains (@ 0) oder CityName.Contains (@ 1)", "London", "USA")


2
2018-03-18 03:56



Du kannst es versuchen.

IList<string> keyword = new List<string>() { "London", "USA", "Johannesburg" };
            var query = db.Customers.Where(c => keyword.Contains(c.CityName));

0
2018-01-05 08:35



Ich habe meinen eigenen C # ähnlichen Evaluator erstellt und ihn in die Dynamische Bibliothek eingebunden. Sehen Sie sich meinen Blogbeitrag an http://blog.alivate.com.au/?p=382


0
2018-03-01 01:54