2010-03-05 175 views
0

我試圖使用LINQ做到這一點:幫助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; 

但GETPID總是返回0。什麼是錯的?

編輯:nvm的語法是正確的。總是返回0的原因是數據庫中不存在該值。我在數據庫中插入了txt box值,然後在刷新myDatabaseSet之前再次調用它。所以我需要添加Fill(),然後getpID能夠讀取值。

全碼:

 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; 

回答

2

代替SingleOrDefault()使用FirstOrDefault()

在具有多個值的結果序列的情況下SingleOrDefault()將失敗表現得如你所願,FirstOrDefault()將在哪裏工作。

謝謝

+0

+1我不知道那種行爲。感謝您的信息! – 2010-03-05 14:42:45

+0

實際上,如果序列有多個值,SingleOrDefault將引發InvalidOperationException。 – 2010-03-05 14:51:26

+0

@Ian:正確,謝謝! – 2010-03-06 14:48:23

1

SingleOrDefault() -

返回 序列的唯一元件,或者如果 序列爲空,一個默認值;

看來您的收藏是空的(默認情況下,如果int是0),檢查ptxtBox.Text