6 Stimmen

Dynamischer LINQ auf eine Sammlung?

Ich habe ein Projekt, das mich bitten, eine solche BIG-Suchmaschine zu tun, aber die alle dynamisch ist. Ich meine, ich kann etwa 0 bis 9 Haupt "Gruppe", die innerhalb so etwas wie eine unendliche Möglichkeit der "wo" mit "OR" oder "AND" haben. Das erste, was wir dachten, war, Dynamic Linq zu verwenden, das eine gute Alternative zum Erstellen dynamischer Abfragen bietet. All dies unter Verwendung von EF mit einem hausgemachten Wrapper.

Probleme : Ich kann nicht auf eine "Sammlung" zugreifen. Ich meine, ich kann einfach auf ein referenziertes Objekt zugreifen (wie Customer.State.StateName = "New-York" OR Custoemr.State.StateName = "Quebec" ), aber ich kann keine Möglichkeit finden, auf etwas wie : "Kunde.Aufträge.AuftragID = 2 OR Kunde.Aufträge.AuftragID = 3" . Ich kann leicht herausfinden, dies ist, weil es eine Sammlung, aber wie kann ich dies tun?

Bitte helfen Sie mir!!

** Entschuldigung für mein Englisch!


Update

Ich bin nicht klar genug, ich denke, sorry, weil im französisch...

Mein Problem ist, dass nichts statisch ist. Es handelt sich um eine Kandidatensuchmaschine für eine Personalvermittlungsfirma, die Kandidaten in ein Unternehmen vermittelt. Auf einer Seite, auf der der Manager nach Bewerbern suchen kann, kann er diese "analysieren", indem er : Bereich(e) (Jobs), Stadt(en) oder viele andere, die der Benutzer bei der Registrierung angegeben hat. All dies im Format (wenn es in SQL wäre):

[...] WHERE (domaine.domainID = 3 OR domaine.domainID = 5 OR domaine.domainID = 23) AND (cities.cityID = 4, cities.city = 32) [...]

Also kann ich nicht tun dies mit einem normalen LINQ-Format wie :

Candidat.Domaines.Where(domain => domain.DomainID == 3 || domain.DomainID == 5 || domain.DomainID == 23);

Sogar die Operatoren in den Parethesen sind dynamisch ("AND" oder "OR")! Deshalb versuchen wir, Dynamic Linq zu verwenden, weil es viel flexibler ist.

Ich hoffe, es ist einfacher, mein Problem zu verstehen ...


Aktualisierung 2 Hier ist meine Methode

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 funktioniert gut, stattdessen, dass es "Nicht zurückgeben einen booleschen". Wie soll ich also vorgehen? Fehler : "Ausdruck vom Typ 'Boolean' erwartet".

Am Ende wird etwas zurückgegeben wie : "( Domaines.Where( DomaineId == 2 && DomaineId == 3 && DomaineId == 4 && DomaineId == 5 ))", was zu meiner LINQ-Abfrage hinzugefügt wird:

var queryWithWhere = from c in m_context.Candidats.Where(WHERE)
                                     select c;

Vergessen Sie nicht, dass es noch 7 oder 8 weitere "mögliche" hinzugefügte Dinge gibt, nach denen Sie suchen können ... Irgendwelche Ideen?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X