帮助LINQ查询

时间:2010-03-05 10:38:22

标签: sql linq linq-to-sql

我正在尝试使用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的原因是db中不存在该值。我在数据库中插入了txt框值,然后在刷新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 个答案:

答案 0 :(得分:2)

而不是SingleOrDefault()使用FirstOrDefault()

如果生成的序列具有多个值SingleOrDefault()将无法按您的意愿运行,FirstOrDefault()将在何处起作用。

由于

答案 1 :(得分:1)

SingleOrDefault() -

  

返回a的唯一元素   序列,或者是默认值   序列是空的;

您的集合似乎是空的(默认情况下,如果int为0),请检查ptxtBox.Text