2010-11-02 8 views
2

j'ai les déclarations de variables suivantes au sommet de ma fonction principaleLINQ avec des paramètres variables non affectés

string brand; 
double price; 
var itemList6 = from i in myStore.items 
    where i.price <= price && i.brand == brand 
    orderby i.type 
    select i; 

Plus tard dans le programme que je demande à l'utilisateur d'une marque et un prix, les mettre dans les variables appropriées , puis exécutez la requête. Cependant, le compilateur ne me laissera pas exécuter ceci, parce que j'utilise des variables non assignées dans la requête. La seule façon de résoudre cela en initialisant les variables? J'essaie généralement de ne pas initialiser la variable si je n'ai pas besoin d'une valeur initiale car je la trouve confuse (essayant de comprendre plus tard où/pourquoi j'ai utilisé cette valeur par défaut).

Répondre

1

Vous devez affecter une valeur aux variables avant de construire la requête LINQ.

La raison est que le compilateur utilise les variables pour construire la requête. Même si la requête ne sera pas exécutée, le compilateur requiert l'affectation de variables avant utilisation, et le compilateur voit la construction de l'expression de requête comme utilisation.

Ma recommandation est simplement d'y mettre une valeur nominale par défaut/température.

+0

La requête n'est pas entièrement construite tant qu'elle n'est pas exécutée. C'est l'exécution différée de LINQ. Je peux même (et je le fais) continuer à assigner des valeurs différentes aux variables et réexécuter la requête pour des résultats différents – baruch

+0

@baruch: Vous avez raison. Je n'étais pas au courant de cette partie de l'exécution différée. Le point reste, vous devez initialiser une variable avant de l'utiliser, même si la variable n'est pas 'utilisée' par la construction de la requête. –

3

Vous pouvez écrire une fonction et de transmettre ces variables comme paramètres pour éviter .. initialisation

également dans le cas où vous finissez par l'initialisation envisager d'utiliser ?? afin d'éviter nulls.

+0

Cela a été un travail de défi, mais rend encore plus d'encombrement, en ajoutant quelques valeurs par défaut, et aurait également la surcharge d'appeler une fonction et de recréer la variable à chaque fois – baruch

0

Une autre façon de le résoudre est de ne pas créer l'objet de requête tant que vous n'avez pas affecté des valeurs à ces variables.

Questions connexes