J'ai un projet qui me demande de faire un tel moteur de recherche mais qui est tout dynamique. Je veux dire que je peux avoir environ 0 à 9 "groupe" principal qui a quelque chose comme une possibilité infinie de "où" avec "OU" ou "ET". La première chose que nous pensons était d'utiliser Dynamic Linq qui fournit une bonne alternative pour construire une requête dynamique. Tout cela en utilisant EF avec un emballage maison.Dynamic LINQ sur une collection?
Problème: Je ne peux pas accéder à une «collection». Je veux dire, je peux accéder facilement à un objet référencé (comme Customer.State.StateName = "New-York" OU Custoemr.State.StateName = "Quebec") mais je ne peux pas trouver un moyen d'accéder à quelque chose comme : "Customer.Orders.OrderID = 2 OU Customer.Orders.OrderID = 3". Je peux facilement comprendre cela parce que c'est une collection, mais comment puis-je faire cela?
S'il vous plaît aidez-moi !!
** Désolé pour mon anglais !!
Mise à jour
Je ne suis pas clair, je pense enought, désolé parce im son français ...
Mon problème parce que rien ne l'est statique. C'est un moteur de recherche de candidats pour une entreprise qui recrute des candidats dans une entreprise. Dans une page où le manager peut rechercher un candidat, il peut "analyser" par: Domaine (s) (Jobs), Ville (s) ou bien d'autres utilisateurs que l'utilisateur a remplis lors de son inscription. Tout ceci dans le format (si c'était en SQL):
[...] OERE (domaine.domaineID = 3 OU domaine.domaineID = 5 OU domaine.domaineID = 23) ET (cities.cityID = 4, villes .ville = 32) [...]
donc je ne peux pas le faire avec un format LINQ normal comme:
Candidat.Domaines.Where(domain => domain.DomainID == 3 || domain.DomainID == 5 || domain.DomainID == 23);
Même l'opérateur dans les paretheses sont dynamiques ("ET" ou « oU ")! C'est pourquoi nous essayons d'utiliser Dynamic Linq parce que c'est beaucoup plus flexible.
Espoir il est plus facile à comprendre mon problème ...
Mise à jour 2 Voici ma méthode
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();
}
Il fonctionne très bien au lieu que "renvoie pas un booléen". Alors, comment dois-je? Erreur: "Expression de type" Boolean "attendue".
A la fin, il retourne quelque chose comme: "(Domaines.Where (DomaineId == 2 & & DomaineId == 3 & & DomaineId == 4 & & DomaineId == 5))." qui est ajouté à ma requête LINQ:
var queryWithWhere = from c in m_context.Candidats.Where(WHERE)
select c;
Ne pas oublier qu'il ya comme 7 ou 8 plus « possible » a ajouté des choses à rechercher dans ... Des idées?
Merci beaucoup. Ce n'est pas exactement ce à quoi je m'attends, mais ça a l'air génial. J'ai encore quelques trucs pour le rendre parfaitement dynamique. Mais merci, très utile. –