J'ai commencé avec this question, ce que j'ai en quelque sorte répondu there, et maintenant je pose la question plus fondamentale ici. J'ai simplifié la requête à ceci:Linq "Impossible de traduire l'expression ... en SQL et ne pouvait pas la traiter comme une expression locale."
var q = from ent in LinqUtils.GetTable<Entity>()
from tel in ent.Telephones.DefaultIfEmpty()
select new {
Name = ent.FormattedName,
Tel = tel != null ? tel.FormattedNumber : "" // this is what causes the error
};
tel.FormattedNumber
est une propriété qui combine les Number
et Extension
champs dans une chaîne parfaitement formatée. Et voici l'erreur qui en résulte:
System.InvalidOperationException: Could not translate expression 'Table(Entity).SelectMany(ent => ent.Telephones.DefaultIfEmpty(), (ent, tel) => new <>f__AnonymousType0`2(Name = ent.FormattedName, Tel = IIF((tel != null), tel.FormattedNumber, "")))' into SQL and could not treat it as a local expression.
Si je change la référence ci-dessus de FormattedNumber
à tout simplement Number
, tout fonctionne très bien. Mais je souhaite que le numéro formaté s'affiche correctement dans ma liste. Que recommandez-vous comme la façon la plus propre et la plus propre de le faire?