Linq "Impossible de traduire l'expression ... en SQL et ne pouvait pas la traiter comme une expression locale."

J'ai commencé avec cette questionj'ai répondu il yet maintenant, je te pose la question plus fondamentale ici. J'ai simplifié la requête:

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 la Number et Extension des champs dans un soigneusement chaîne formatée. Et voici l'erreur que les résultats:

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 à partir de FormattedNumber à tout simplement Numbertout fonctionne bien.

Mais je ne veux le nombre formaté pour afficher joliment dans ma liste. Que recommandez-vous comme la plus élégante, la plus propre façon de faire?

source d'informationauteur Shaul Behr | 2009-08-12