Ich habe ein Projekt, das mich bittet, so eine große Suchmaschine zu machen, die aber allesamt dynamisch ist. Ich meine, ich kann ungefähr 0 bis 9 Hauptgruppen haben, die innerhalb so etwas wie eine unendliche Möglichkeit von "wo" mit "ODER" oder "UND" haben. Das erste, was wir denken, war die Verwendung von Dynamic Linq, die eine gute Alternative zum Erstellen dynamischer Abfragen bieten. All dies mit EF mit einer selbstgemachten Verpackung.Dynamische LINQ für eine Sammlung?
Probleme: Ich kann nicht auf eine "Sammlung" zugreifen. Ich meine, ich kann leicht auf ein referenziertes Objekt zugreifen (wie Customer.State.StateName = "New-York" ODER Custoemr.State.StateName = "Quebec"), aber ich kann keinen Weg zu etwas wie finden : "Customer.Orders.OrderID = 2 ODER Customer.Orders.OrderID = 3". Ich kann das leicht herausfinden, weil es eine Sammlung ist, aber wie kann ich das machen?
Bitte helfen Sie mir !!
** Sorry für mein Englisch !!
aktualisieren
Ich bin genug nicht klar, wie ich glaube, leid sein, weil im französisch ...
Mein Problem sein, weil nichts ist statisch. Es ist eine candidat Suchmaschine für eine regruting compagny, die Kandidaten in ein Unternehmen setzen. Auf einer Seite, auf der der Manager candidat suchen kann, kann er Folgendes analysieren: Domain (s) (Jobs), City (s) oder viele andere, die der Benutzer bei der Registrierung ausgefüllt hat. All dies im Format (wenn es in SQL wäre):
[...] WHERE (Domaine.DomainID = 3 ODER Domaine.DomainID = 5 OR Domaine.DomainID = 23) UND (Städte.CityID = 4, Städte .city = 32) [...]
So kann ich diese wie mit einem normalen LINQ-Format nicht tun:
Candidat.Domaines.Where(domain => domain.DomainID == 3 || domain.DomainID == 5 || domain.DomainID == 23);
Auch der Betreiber in den paretheses dynamisch sind ("AND" oder „OR ")! Deshalb versuchen wir, Dynamic Linq zu verwenden, weil es viel flexibler ist.
Hoffnung seine einfacher, mein Problem zu verstehen ...
Update 2 meine Methode Hier ist
private string BuildDomainsWhereClause() {
StringBuilder theWhere = new StringBuilder();
if (this.Domaines.NumberOfIDs > 0) {
theWhere.Append("(");
theWhere.Append(string.Format("Domaines.Where("));
foreach (int i in this.Domaines.ListOfIDs) {
if (this.Domaines.ListOfIDs.IndexOf(i) > 0) {
theWhere.Append(string.Format(" {0} ", this.DispoJours.AndOr == AndOrEnum.And ? "&&" : "||"));
}
theWhere.Append(string.Format("DomaineId == {0}", i));
}
theWhere.Append("))");
}
return theWhere.ToString();
}
Es ist großartig, anstatt funktioniert, dass es "nicht einen boolean zurückgeben". Also wie soll ich? Fehler: "Ausdruck vom Typ 'Boole' 'erwartet".
Am Ende kehrt es so etwas wie: "(Domaines.Where (DomaineId == 2 & & DomaineId == 3 & & DomaineId == 4 & & DomaineId == 5))" die an meine LINQ-Abfrage hinzugefügt:
var queryWithWhere = from c in m_context.Candidats.Where(WHERE)
select c;
Vergessen Sie nicht, dass es wie 7 oder 8 mehr „möglich“ ist hinzugefügt Dinge in suchen ... Irgendwelche Ideen?
Vielen Dank. Es ist nicht genau das, was ich erwartet habe, aber es sieht gut aus. Ich muss es noch ein bisschen austricksen, um es perfekt dynamisch zu machen. Aber danke, sehr nützlich. –