2012-07-13 3 views
1

L'instruction else ne fonctionne pas correctement dans foreach loop? Voici mon code. Si quelque chose ne va pas avec mes explications de code serait bien.if..else instruction ne fonctionne pas dans foreach loop

protected void getdata_Click(object sender, EventArgs e) 
{ 
    using (var db2 = new cftzClassDataContext()) 
    { 
     var username = (from p in db2.cftzAccounts 
         where p.username.Equals(getdata2.Text) 
         select p); 
     foreach (var p in username) 
     { 
      if (getdata2.Text == p.username) 
      { 
       displayMSG.Text = "Is this correct "; 
       displayData.Text = p.username; 
       displayQuestionMark.Text = "?"; 
      } 
      else 
      { 
       displayMSG.Text = "No User Found."; 
      } 
     } 
    } 
} 
+0

Qu'est-ce qui ne va pas? – SingerOfTheFall

+0

Vous savez que vous êtes toujours en train d'écraser "displayMSG.Text"? Le dernier va gagner! –

+0

d'autre ne fonctionne pas :(je ne sais pas pourquoi – FishBowlGuy

Répondre

9

La déclaration if est entièrement redondant, que vous avez déjà filtré votre liste pour inclure uniquement les comptes dont le nom d'utilisateur est égal à getData2.Text. Par conséquent, votre test if sera toujours évalué à true.

Vous pouvez récrire comme cela, avec le même effet

using (var db2 = new cftzClassDataContext()) 
    { 
     var username = (from p in db2.cftzAccounts.Take(100) 
         where p.username.Equals(getdata2.Text) 
         select p); 

     foreach (var p in username) 
     { 
      displayMSG.Text = "Is this correct "; 
      displayData.Text = p.username; 
      displayQuestionMark.Text = "?"; 
     } 
    } 

Cependant, comme Hans souligne, votre boucle est ainsi inutile, puisque tous les noms d'utilisateurs seront les mêmes. Votre code pourrait être aussi simple que:

using (var db2 = new cftzClassDataContext()) 
    { 
     var user = db2.cftzAccounts. 
       FirstOrDefault(account => account.username.Equals(getdata2.Text)); 

     if (user != null) 
     { 
      displayMSG.Text = "Is this correct "; 
      displayData.Text = user.username; 
      displayQuestionMark.Text = "?"; 
     } 
     else 
     { 
      displayMSG.Text = "No User Found."; 
     } 
    } 
+0

Eh bien, j'ai essayé le code ur mais j'ai eu l'erreur à la place – FishBowlGuy

+0

Ah - Je pense que je comprends votre problème maintenant. Vous voulez obtenir le compte appartenant au nom d'utilisateur. Si aucun compte n'existe, vous souhaitez afficher un message approprié. S'il vous plaît voir le 2ème morceau de code que je viens d'ajouter. –

+0

Remerciements ça marche: D – FishBowlGuy

0

ne sais pas ce que vous essayez d'atteindre, mais il semble que vous essayez de trouver si l'utilisateur est dans la base de données et le cas échéant, configurer l'objet DisplayMsg. cant vous si aucun utilisateur ne se trouve quelque chose comme

var user=db2.Single(u=> u.username==getdata2.Text); 

, lancera une Singe exception. Si vous ne le faites pas, vous pouvez utiliser la méthode SingleOrDefault()

protected void getdata_Click(object sender, EventArgs e) 
{ 
    using (var db2 = new cftzClassDataContext()) 
    { 
     try 
     { 
      var user=db2.Single(u=> u.username==getdata2.Text); 
      displayMSG.Text = "Is this correct "; 
      displayData.Text = user.username; 
      displayQuestionMark.Text = "?"; 
     } 
     catch 
     { 
      displayMSG.Text = "No User Found."; 
     } 
    } 
}