J'ai une extension de chaîne C# qui rend vraiment la vie facile, mais je reçois l'exception:Comment adapter une simple extension de chaîne pour soutenir SQL
Method 'System.String ToUrlString(System.String)' has no supported translation to SQL.
Je l'ai vu cela comme un problème commun et certaines personnes ont trouvé des façons de régler cela pour leur méthode, mais je ne suis pas sûr que ce soit possible pour moi. C'est juste un raccourci simple et j'ai essayé de l'utiliser avec une expression régulière ainsi, et la même exception se présente.
public static string ToUrlString(this String val)
{
return val.Trim().ToLower().Replace(" ", "-").Replace(":", string.Empty);
}
Y a-t-il d'autres décorateurs ou façons dont je peux adapter ce code pour qu'il puisse supporter SQL? J'appelle cela sur la clause where dans mes expressions LINQ. .ToTagString()
n'est pas exactement la même méthode que .ToUrlString()
mais c'est très similaire.
EDIT: Par une suggestion ci-dessous, voici quelque chose d'autre que j'ai essayé, mais je reçois toujours la même erreur.
public IEnumerable<Post> GetPostsByTag(string tagName)
{
var query = from p in db.Posts
join pt in db.PostTags on p.PostID equals pt.PostID
where pt.Tag.TagName.ToTagString().Equals(tagName.ToTagString())
orderby p.PostDate descending
select p;
var result = query.AsEnumerable();
return from r in result
select r;
}
Je ne suis pas d'accord. Il doit y avoir un moyen, car si vous utilisiez la même condition (.Trim(). ToLower() ....) dans la requête LINQ, cela aurait fonctionné. Dans ce cas, le problème n'est pas que l'une de ces méthodes n'a pas de traduction. En fait, ils ont tous. Le problème est que vous faites un appel de fonction où vous devriez avoir une expression. –
Bien sûr, je devrais également mentionner que, bien que la solution ci-dessus fonctionne, elle a évidemment un inconvénient de performance car vous tirez toutes les lignes de la table et ne filtrez que du côté client. –
Merci pour cette suggestion, j'ai essayé cela, mais la différence est que je ne veux pas appeler cette extension de chaîne sur l'instruction select, mais plutôt je veux l'utiliser dans la clause where sur une colonne db et une chaîne d'entrée à faciliter les comparaisons. – MaseBase