2017-10-15 12 views
1

J'essaie d'utiliser une vue 2sxc pour créer des statistiques avec linq. Cependant, je n'arrive pas à appeler n'importe quel C# var. Voici un exemple:2sxc - Impossible d'utiliser C# vars

@{ 
    if (@Request.QueryString["ano"] == "" || @Request.QueryString["ano"] == null) { 
     <p>ano not set, using current year (@DateTime.Now.Year)</p> 
     var year = @DateTime.Now.Year; 
     } else { 
     <p>ano set (@Request.QueryString["ano"])</p> 
     var year = @Request.QueryString["ano"]; 
    } 

    var items = AsDynamic(App.Data["entity"]); 
    items = items.Where(p => Convert.ToDateTime(p.data_a).Year == year); 
} 

Il en résulte

error CS0103: The name 'year' does not exist in the current context 

que je fais à nouveau quelque chose de vraiment stupide?

+1

Votre variable 'year' a déclaré une portée intérieure. Déplacez la décalcification au-dessus de la déclaration 'if' –

+0

Je ne comprends pas très bien ... Ça ne devrait pas être la même chose? var x = 1 et si (1 = 1) {var x = 1}? Néanmoins, cela fonctionne. Ajouter int année = 0; en haut et en adaptant les requêtes à int le fixe. Merci (pourriez-vous également poster votre commentaire comme réponse pour le résoudre?). –

Répondre

2

Vous déclarez variable dans la déclaration if et faisant référence à l'extérieur if
Maintenant, vous pouvez réécrire votre code comme ceci:

@{ 
    int year = 0; 
    if (@Request.QueryString["ano"] == "" || @Request.QueryString["ano"] == null) { 
     <p>ano not set, using current year (@DateTime.Now.Year)</p> 
     year = @DateTime.Now.Year; // no "var" keyword here! 
     } else { 
     <p>ano set (@Request.QueryString["ano"])</p> 
     year = int.Parse(Request.QueryString["ano"]); 
    } 

    var items = AsDynamic(App.Data["entity"]); 
    items = items.Where(p => Convert.ToDateTime(p.data_a).Year == year); 
} 
+0

Merci. Juste une petite correction: année = Int32.Parse (@ Request.QueryString ["ano"]); –

+0

@ JoãoGomes oui, vous avez raison. Par ailleurs 'int.Parse (Request.QueryString [" ano "])' fonctionne également. Je vais éditer ma réponse –