2010-03-05 125 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