2009-12-14 4 views
1

La requête suivante se plaint que la conversion int est pas pris en charge.La conversion à un int dans LINQ ne fonctionne pas?

var list = from d in data 
      where d.Id == (int)GridView1.DataKeys[0].Value 
      select d; 

Il se plaint sur la ligne de GridView1.SelectedInex (int) me disant que la conversion Int est pas pris en charge. J'ai également essayé Convert.ToInt32, mais cela n'a pas fonctionné non plus.

Est-ce logique qui doit être calculé avant, comme ci-dessus la requête LINQ ou est-il une manière particulière de le faire et sinon, pourquoi il ne le supporte pas?

+2

first..where est (int) GridView1.SelectedInex son pas dans le code example..also il doit être D.ID == –

+0

Obtenez-vous une erreur de compilation ou une erreur d'exécution? Quel est exactement le message d'erreur? –

+1

conversion non prise en charge est une erreur d'exécution, car une partie de la requête ne peut pas être analysée par le fournisseur (linq à SQL fournisseur dans ce cas) –

Répondre

7

Pourquoi ne pas essayer de parser la valeur à un nombre entier avant la main, il n'est pas nécessaire dans la requête.

Int id; 
if (Int32.TryParse(ridView1.DataKeys[0].Value.ToString(), out id)) 
{ 
    var list = from d in data 
       where d.Id == id 
       select d; 
} 
+2

= doit être == sinon l'expression échouera car elle n'est pas booléenne. – Matt

+0

@envalid: fixe, désolé, copier le contrôle de la pâte :) –

+0

Si j'avais eu des upvotes gauche aujourd'hui, je +1 cela. :) – Henric

0

Je devine ici, mais essayez:

where d.Id == (int)(GridView1.DataKeys[0].Value); 

dans le cas où il essaie de lancer le GridView.

(edit: code fixe - voir le commentaire sur la question)

Cette réponse est mal!

+1

Ce n'est pas le cas, ce code est équivalent au code dans la question –

+0

OK. Pas de problème - juste une supposition! :) –

+0

Merci d'avoir essayé de toute façon. – Xaisoft

1

Je suppose que le point-virgule après la ligne où est une faute de frappe?

Tirez la distribution en dehors de la requête LINQ, il essaie de générer des requêtes SQL pour l'opération de distribution, qui ne sont pas pris en charge

int id = (int)GridView1.DataKeys[0].Value; 
var list = from d in data 
      where d.Id = id 
      select d; 
+0

Ouais désolé, j'ai enlevé le point-virgule. C'est ce que je voulais dire en faisant d'abord la logique au-dessus de la requête puis en utilisant la valeur calculée dans la clause where. – Xaisoft

+0

Donc, ce que vous dites est que Linq ne supporte pas l'expression SQL CAST? Est-ce que tu sais pourquoi? – Xaisoft

+0

cela n'a rien à voir avec SQL CAST, le fournisseur Linq traduit la requête Linq en SQL en analysant l'arbre d'expression. Il ne peut pas le faire lorsqu'une opération dans l'arborescence ne peut pas être traduite en SQL. –

0

vous coulée, non conversion.

int.Parse(GridView1.DataKeys[0].Value) 

serait en cours de conversion.

GridView1.DataKeys [0] .Value renvoie un objet qui peut être ou ne pas être un entier.

+0

la conversion ou la non-diffusion n'est pas ce qui cause ce message –

Questions connexes