2010-03-05 5 views
0

Je suis en train de le faire avec LINQ:Aide requête LINQ

SQL>> SELECT p_Id from items WHERE p_Name = 'R1' 


LINQ>> var getpID = (from p in myDatabaseDataSet.Items 
         where p.p_Name == ptxtBox.Text 
         select p.p_Id).SingleOrDefault(); 

      int p_Id = getpID; 

Mais GETPID retourne toujours 0. Quel est le problème ?.

Édition: nvm la syntaxe est correcte. Raison pour laquelle il a toujours retourné 0 est la valeur n'existe pas dans la base de données. J'avais la valeur de la boîte de txt insérée dans la base de données, puis j'essayais de l'appeler à nouveau avant d'actualiser myDatabaseSet. J'ai donc besoin d'ajouter Fill(), puis getpID est capable de lire la valeur.

le code complet:

 int c_Id = Convert.ToInt32(pcomboBox.SelectedValue); 

     int p_Id = 0; 
     string itemName = ptxtBox.Text; 


     this.Validate(); 
     this.itemsBindingSource.EndEdit(); 
     this.itemsTableAdapter.Insert(c_Id, itemName); 
     this.myDatabaseDataSet.AcceptChanges(); 
     this.itemsTableAdapter.Fill(myDatabaseDataSet.Items); 


      var getpID = (from p in myDatabaseDataSet.Items 
          where p.p_Name == itemName 
          select p.p_Id).SingleOrDefault(); 

      p_Id = getpID; 

Répondre

2

Au lieu de SingleOrDefault() utilisation FirstOrDefault()

Dans le cas de la séquence résultante ayant plusieurs valeurs SingleOrDefault() échouera se comporter comme vous le souhaitez, où sont FirstOrDefault() fonctionnera.

Merci

+0

+1 Je ne connaissais pas ce comportement. Merci pour l'information! –

+0

En fait, si la séquence a plusieurs valeurs, SingleOrDefault lancera une exception InvalidOperationException. –

+0

@Ian: corrigé, merci! –

1

SingleOrDefault() -

Renvoie le seul élément d'une séquence , ou une valeur par défaut si la séquence est vide;

Il semble que votre collection est vide (par défaut si int est 0), vérifiez la ptxtBox.Text valeur