Toujours vraiment aux prises avec cela et semble tourner en rond.Dynamic LINQ Multiple Où Clause
J'ai le code suivant qui me rend fou. Il doit remplir une liste d'éléments à utiliser dans une zone de texte autocomplete:
public string[] GetAutoComplete(string prefixText, int count)
{
string memberid = HttpContext.Current.Session["MemberID"].ToString();
string locationid = HttpContext.Current.Session["LocationID"].ToString();
string inhouse = HttpContext.Current.Session["Inhouse"].ToString();
string supplier = HttpContext.Current.Session["Supplier"].ToString();
string groupw = HttpContext.Current.Session["Group"].ToString();
string external = HttpContext.Current.Session["External"].ToString();
MyEnts autocomplete = new MyEnts();
var r = from p in autocomplete.tblAutoCompletes
where p.MemberId == memberid && p.LocationId == locationid && p.ACItem.Contains(prefixText)
select p.ACItem;
if (inhouse == "Inhouse")
r = r.Where(p => p == inhouse);
if (supplier == "Supplier")
r = r.Where(p => p == supplier);
if (groupw == "Group")
r = r.Where(p => p == groupw);
if (external == "External")
r = r.Where(p => p == external);
r.OrderBy(p => p);
return r.ToArray();
Ce que je suis en train de récupérer la dynamique clause where le long des lignes de ce qui suit.
Si inhouse = "Inhouse", la liste des éléments doit inclure le mot "Inhouse". Si inhouse! = "Inhouse", le mot "Inhouse" devrait être exclu de la liste.
Cette même logique devrait ensuite être appliquée entre les différentes clauses Where, à savoir Fournisseur, Groupe, Externe.
J'ai vraiment essayé beaucoup de méthodes différentes mais je ne peux pas pour la vie de moi obtenir le truc pour travailler et c'est frustrant moi un peu.
Si quelqu'un peut suggérer une façon de faire cela, vous obtiendrez un gros bisou ou une grosse bière givrée si nos chemins se croisent.
Je ne comprends pas votre objectif ici, si le 'ACItem' contient le texte de préfixe alors sûrement vous voudriez toutes les entrées qui le font. Deuxièmement, on supposerait de votre code que ACItem est une chaîne renvoyée par votre objet, de sorte que les comparaisons suivantes échoueront, sauf si ACItem est "Inhouse", "Supplier", "Group" ou "External". En effet vous créez une routine pour fournir l'auto complète pour 4 mots. ACItem, comme je le soupçonne, est-il plus complexe qu'une simple chaîne de caractères? – Lazarus
Mis à part toute autre chose, votre commande ne fait rien - vous avez besoin de 'r = r.OrderBy (p => p);' –
Bonjour Lazare (bien fait en revenant d'entre les morts en passant, super retour ça). ACItem est une colonne contenant la liste des éléments à compléter automatiquement. Mon scénario inclut les préférences de l'utilisateur (à travers les sessions), ce qui me permet de restreindre ce que l'utilisateur peut également avoir accès. Donc, s'ils ne sont pas autorisés à voir Inhouse, la liste de saisie semi-automatique ne montrerait pas ces éléments. Si ce n'est pas possible, ou extrêmement difficile pour un imbécile comme moi, je pourrais finir par les laisser dans la liste et mettre une certaine validation une fois qu'ils ont sélectionné l'élément. –