Ich habe die folgende Klasse:C# Prädikats Builder mit der Verwendung und mit OR
public class testClass
{
public string name { get; set; }
public int id { get; set; }
public int age { get; set; }
}
und den folgenden Code:
var list = new List<testClass>();
list.Add(new testClass { name = "name", id = 1, age = 30 });
list.Add(new testClass { name = "name", id = 2, age = 22 });
list.Add(new testClass { name = "name", id = 3, age = 20 });
list.Add(new testClass { name = "name", id = 4, age = 30 });
list.Add(new testClass { name = "name", id = 5, age = 27 });
list.Add(new testClass { name = "name", id = 6, age = 30 });
var qble = list.AsQueryable();
var pred = PredicateBuilder.New<testClass>();
pred.Or(x => x.name == "name" && x.id == 1);
pred.Or(x => x.age == 30);
var predQuery = qble.AsExpandable().Where(pred);
Mein Ziel ist es, eine Abfrage zu erstellen, die alle Datensätze zurückgibt, wo:
id = 1 and name = "name"
ODER
So für die Abfrage oben, sollte es die Elemente bei Index 0 zurück, 1, 5
Für die oben stehende Abfrage es tut, wie ich will.
Allerdings möchte ich jetzt das Prädikat erstellen, indem Sie eine Reihe von Abfragen kombinieren, anstatt sie explizit zu definieren. So habe ich jetzt die folgenden zwei Anfragen:
var query1 = list.Where(x => x.name == "name" && x.id == 1);
var query2 = list.Where(x => x.age == 30);
und ich mag die Abfrage erstellen, basierend auf den Variablen query1
und query2
, ohne explizit die Bedingungen zu definieren - wie diese Bedingungen dynamisch definiert werden, und ich weiß nicht, was sie sind, und sie werden an verschiedenen Orten definiert werden.
Meine Vermutung ist, ich so etwas wie dies tun muß (Fortsetzung von oben):
var qble = list.AsQueryable();
var query1 = list.Where(x => x.name == "name" && x.id == 1);
var query2 = list.Where(x => x.age == 30);
var pred = PredicateBuilder.New<testClass>();
pred.Or(query1);
pred.Or(query2);
var predQuery = qble.AsExpandable().Where(pred);
aber das ist nicht ganz korrekt als das Prädikat Builder wird die Abfrage nicht als Parameter akzeptieren.
Kann dies getan werden?
Gibt es eine Notwendigkeit, die Abfragen zu trennen bauen? –
@ Jonathan.ihm Ich bin mir nicht sicher, was du meinst? – Alex
Das klingt wie ein [xy Problem] (https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Was versucht ihr eigentlich zu lösen/bauen? Was ist das "große Bild"? – Igor