Je suis sur les conseils Ici , essayant de tirer parti de la déclaration que le SQL ne se crée pas tant que l'énumérateur n'est pas trébuché. Cependant, je reçois l'erreur suivante sur le code ci-dessous. J'utilise Linq2ENTités, pas LINQ2SQL. Y a-t-il un moyen de le faire dans Linq2entivies?
méthode 'boolean comme (system.string, system.string)' ne peut pas être utilisé sur le client; C'est uniquement pour la translation sur SQL. p> notes: dB est une mappage d'entité sur un serveur SQL. P> P>
5 Réponses :
vous pouvez faire esql et faire quelque chose comme le ci-dessous ..
db.MyTables.Where("it.Type like '" + typeFilter + "'").ToList();
Cela ne compile pas sur le mien (même l'ajout du manquant +). Je suis dans vs2008, .NET 3.5 SP1
Nevermind, il doit aller spécifiquement directement à la table, pas plus tard Ienumerable. Merci.
Maintenant, il suffit de «nom de terrain» ne pouvait pas être résolu dans la portée ou le contexte actuel.
the sqlmethods Code> La classe
est destinée à être utilisée avec LINQ-TO-SQL. Lorsque vous utilisez des méthodes à partir de celui-ci (que la documentation publique vous dit de ne pas faire, ce n'est pas la consommation publique), le iquéryable code>
fournisseur pour Linq-to-entités ne sait pas quoi faire avec cela ni la traduire. P>
Si vous avez eu une seule base générique au début ou à la fin du filtre, vous pouvez utiliser Cependant, dans ce cas, vous avez un nombre variable de caractères génériques, vous devrez donc tomber au niveau ESQL et construire une requête à partir de celle indiquée dans La réponse de Nix . P> startswith code>
ou Endswith code> méthodes sur la chaîne code> La classe code> classe et Linq-to-entités supporteront cela. P>
Je ne sais pas comment vous pouvez faire un cadre d'entité utilise l'opérateur "réel", mais une solution de contournement éventuelle serait d'exprimer une expression similaire en termes de par exemple: p> et ainsi de suite ... p> Notez que ce n'est pas 'T exactement équivalent à l'utilisation de comme dans SQL: par exemple Voici un exemple de mise en œuvre, en utilisant et voici comment vous pouvez l'utiliser: p> Je viens de l'essayer avec Un simple modèle EF, et il semble fonctionner correctement :) p> p> startswith code>,
contient < / code> et
findswith code>
comme'% ABC% BCD% ' code> donnerait à
contient ("ABC") && contient ("BCD") CODE> . Cela correspondrait à "ABCD" même si l'état original de la forme. Mais pour la plupart des cas, il devrait être assez bon. P>
prédicatbuilder code>
et Linqkit pour construire expressions basées sur un modèle similaire: p>
Malheureusement, j'ai besoin de "comme", mais c'est une solution intéressante.
Approche intéressante, bien que comme '% a% b%' => startswith ("a") && contient ("B") code> n'est pas vrai, car vous avez trop de pour cent au début.
comme 'A% B%' code> est meilleur.
Vous pouvez utiliser un véritable comme dans un lien vers des entités
Ajouter P>
public static class Extensions { [EdmFunction("DocTrails3.Net.Database.Models", "String_Like")] public static Boolean Like(this String searchingIn, String lookingFor) { throw new Exception("Not implemented"); } }
J'ai posté Ma solution ici , juste au cas où ici le cas est aussi:
pour l'entité framework 6.2 Vous pouvez utiliser DBFonctions P>
Par exemple: P>
try { using (var db = new YOUREntities()) { var data = db.LenderProgram.Where(i => DbFunctions.Like(i.LenderProgramCode, "OTO%")) .ToList(); return data; } } catch (Exception e) { e.HandleException(); }