var items = from c in contacts
select new ListItem
{
Value = c.ContactId, //Cannot implicitly convert type 'int' (ContactId) to 'string' (Value).
Text = c.Name
};
var items = from c in contacts
select new ListItem
{
Value = c.ContactId.ToString(), //Throws exception: ToString is not supported in linq to entities.
Text = c.Name
};
Y a-t-il un moyen d'y parvenir ? Notez que dans VB.NET il n'y a pas de problème, utilisez le premier extrait, il fonctionne parfaitement, VB est flexible, je n'arrive pas à m'habituer à la rigueur de C# !
2 votes
.ToString() ne fonctionne pas non plus pour LinqToEF en VB. IMHO, un peu stupide.
5 votes
@StingyJack, le problème vient de l'ELINQ (entités linq 2), parce qu'il traduit votre code en SQL, et quand il s'agit d'une requête ToString interne, il ne sait pas comment traduire 'ToString' en SQL. Contrairement à ce qui se passe avec les objets linq 2, lorsqu'il n'y a pas de traduction et que tout est constitué de lambdas CLR, le traitement s'effectue directement sur les objets demandés.
1 votes
Je suis simplement irrité qu'ils autorisent la compilation de ce type d'erreur, et que j'aie dû troller éternellement pour trouver une description en anglais simple de la cause (sans jargon juridique et académique).
1 votes
Vous avez raison, mais ils ont également raison, ils ne sont pas censés traduire toutes les fonctionnalités du CLR et du CLR personnalisé en SQL, surtout pas dans la toute première version de EF :) A propos de ToString, lisez la réponse de Brian : stackoverflow.com/questions/1066760/
0 votes
Super, mais qu'en est-il des gens qui utilisent 3.5, pas 4 ? Alors quoi ?
0 votes
Il semble que la question évidente que personne n'a posée est la suivante : pourquoi diable la propriété ListItem.Value est-elle une chaîne de caractères et non un nombre entier ?
0 votes
Parce que ce n'est pas la question qui a été posée.