【问题标题】:Help with LINQ query帮助 LINQ 查询
【发布时间】:2010-03-05 10:38:21
【问题描述】:

我正在尝试使用 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 框值,然后在刷新 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;

【问题讨论】:

    标签: sql linq linq-to-sql


    【解决方案1】:

    FirstOrDefault()代替SingleOrDefault()

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

    【讨论】:

    • 其实如果序列有多个值,SingleOrDefault会抛出InvalidOperationException。
    【解决方案2】:

    SingleOrDefault() -

    返回 a 的唯一元素 序列,或默认值,如果 序列为空;

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

    【讨论】: