2009-07-27 4 views
2

J'essaie d'interroger le numéro de référence unique d'une table en utilisant Linq to Entities. L'identifiant est fourni via une zone de texte et donc une chaîne dans mon code. Évidemment, dans la table de la base de données, le champ est un entier. J'ai donc essayé d'utiliser .ToString d'abord, puis .Contient de la même manière qu'avec un varchar(). Cela ne semble pas fonctionner, avec l'erreur provenant de la méthode .ToString.Linq Requête sur int utilisant la chaîne

Comment est-ce que tu fais ça? J'ai essayé de convertir le contenu des zones de texte en un nombre entier, mais cela signifie que l'utilisateur devrait entrer l'int exact au lieu d'un nombre partiel.

Merci beaucoup

+2

Fournissez un exemple des requêtes LINQ qui ne fonctionnent PAS pour vous. –

Répondre

-1
int value; 
if(int.TryParse(someTextString,out value)) 
{ 
    //do work here using integer comparision with 'value' 
} 

Que voulez-vous dire par la valeur "partielle"? Quoi que vous "ajoutiez" à la chaîne fournie par l'utilisateur, vous pouvez toujours faire avant d'analyser la valeur. Votre explication n'est pas très claire.

Si vous essayez en effet de faire une recherche avec caractères génériques, cela échouera en utilisant Linq-to-entities avec une valeur DB int. Je doute que lte aura beaucoup de sens de sometable.intvalue.ToString(). Contient(). Dans ce cas, vous devrez peut-être effectuer des calculs côté client pour déterminer les plages à extraire ou pour écrire une procédure stockée effectuant la recherche à la fin du SQL.

+0

Je suppose qu'il veut dire qu'il veut être en mesure d'entrer "12" et obtenir "12" "121" et "1234" de retour ... (et mayb même "312"?) – Benjol

1

Je ne sais pas pourquoi toString ne le fait pas travailler pour vous. J'ai essayé ceci aux méthodes. Les deux réponses renvoyées:

List<int> ids = new List<int>() { 111, 211, 311, 422, 522, 622, 733, 833, 933 }; 
string query = "11"; 

var result = ids.Where(id => id.ToString().Contains(query)); 
var result2 = ids.ConvertAll<string>(i => i.ToString()).Where(id => id.Contains(query)); 
// Both return the first three items 
+3

Alors que le code fonctionnera bien pour linq- to-objects comme le démontre votre code, Linq-to-entities peut ne pas aimer cela car il se peut qu'il ne se traduise pas trop bien en SQL, ce à quoi l'expression sera convertie en cas d'OP. – spender