Помощь с запросом LINQ - PullRequest
0 голосов
/ 05 марта 2010

Я пытаюсь сделать это с помощью 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 ]

2 голосов
/ 05 марта 2010

Вместо SingleOrDefault () используйте FirstOrDefault ()

В случае, если результирующая последовательность имеет несколько значений, SingleOrDefault() не будет вести себя так, как вы хотите, где FirstOrDefault() будет работать.

Спасибо

1 голос
/ 05 марта 2010

SingleOrDefault() -

Возвращает единственный элемент последовательность или значение по умолчанию, если последовательность пуста;

Кажется, что ваша коллекция пуста (по умолчанию, если int равно 0), проверьте значение ptxtBox.Text

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...