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();
}