Рейтинг:
14
OriginalGriff
Это не так Where
вот в чем проблема!
Вы заявили: student
как Students
переменная:
Students student = new Students();
Но ваш код преобразует всю возвращаемую коллекцию в строку:
db.Students.Where(x => x.UserId == userId).ToString()
и пытается присвоить эту строку
student
!
Первое, что вам нужно так это подумать о том, что вы хотите вернуть - и
Where
возвращает коллекцию элементов, а не один элемент. Вместо того, чтобы сказать, где именно, я бы предложил
Метода firstordefault[
^]:
student = db.Students.FirstOrDefault(x => x.UserId == userId);
Который возвращает одно значение (или null, если совпадений нет)
Это предполагает, что
db.Students
представляет собой коллекцию
Student
предметы!
NebroProg
Хорошо,
но этот запрос на обновление более одного столбца, потому что идентификатор пользователя является foreinkey
таким образом FirstOrDefault возвращает одну строку
OriginalGriff
Этот запрос ничего не обновляет!
Все, что он делает, это возвращает соответствующие строки; он не изменяет ни одну из них.
NebroProg
Я знаю, но я имею в виду, что этот код должен возвращать более одного столбца
OriginalGriff
Этот код не возвращает "столбцы" - он возвращает один экземпляр класса из коллекции. Если класс содержит интересующие вас "столбцы", то прекрасно. Иначе...
NebroProg
ладно,
если код будет таким
студент = дБ.студенты.FirstOrDefault(x => x.UserId == userId).Выберите(x =>x.UserId);
в чем же заключается ошибка
OriginalGriff
:вздыхать:
First или Default возвращает одно значение, а не коллекцию. Где возвращает коллекцию, а не одно значение.
Если вы хотите присвоить значение переменной - как показано в вашем примере кода - то вы хотите использовать FirstOrDefault.
Если вам нужно несколько значений, то вы используете Where.
Только коллекции могут быть обработаны методами Linq, поэтому, если вы возвращаете один элемент, вы не можете попытаться выбрать его идентификатор.
И - честно говоря - ваше значение ID очень маловероятно, чтобы быть студентом в любом случае; студент, вероятно, будет содержать значение ID, но это не будет так! И зачем вам пытаться выбрать значение идентификатора, если вы уже знаете его, потому что вы выбрали только те элементы, которые имеют определенное значение?
Попробуй
MyIDType studentID = db.Students.FirstOrDefault(x => x.UserId == userId).идентификатор пользователя;
Он может делать то, что вы хотите. Но... это то же самое, что сказать::
MyIDType studentID = userId;
У меня возникает определенное ощущение, что вы кодируете здесь "догадкой и надеждой": это не сработает. Вам нужно перестать гадать и начать думать о том, что вы пытаетесь сделать!