Member 14087498 Ответов: 4

Как выполнить запрос со списком в языке Си#


Привет, мне просто интересно, могу ли я выполнить такой запрос:

Что я уже пробовал:

List <studentclasslist> = _context.StudentClass
                    .Where(sc => sc.ClassId == 1)
                    .ToList();
 
List<int> studentIdList = new List<int>(); 

foreach (var student in studentClassList )
{
   studentIdList = _context.Student.Where(st => st.Id == student.StudentId).ToList(); 
}


Заранее спасибо.

4 Ответов

Рейтинг:
2

BillWoodruff

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

Однако не волнуйтесь: все, кого я знаю, прошли через кривую обучения, чтобы немного свободно использовать Linq :) Ну ладно, имхо, людям с глубоким фоном в языках запросов БД легче; я просто их не знаю :)

Пожалуйста, подумайте о том, чтобы приобрести книгу по Linq и использовать онлайн-инструмент LinqPad [^], предоставленный братьями Альбихари. У них есть несколько книг по Linq; и вы можете найти это полезным: [^].

Я обнаружил, что мои студенты хорошо реагируют на идею о том, что оператор Where-это "функция выбора", а оператор Select-это функция, которая перечисляет и преобразует элементы в другую форму.


Maciej Los

5ed!
Я почти не обратил на это внимания...

Рейтинг:
2

OriginalGriff

Ну, вы могли бы ... если вы правильно поняли имена, то C# чувствителен к регистру ... но толку от этого будет немного.

Назначение внутри цикла означает, что конечный результат будет только конечным результатом, потому что он "отбрасывает" все предыдущие результаты каждый раз вокруг цикла.

Возможно, вы захотите рассмотреть List.AddRange вместо назначения, но на первый взгляд вы можете подумать о своих данных и отношениях между ними, а не прыгать в код подобным образом - даже не зная точно, что вы пытаетесь сделать, это выглядит очень неэффективным способом сделать что-то!


Рейтинг:
1

Christian Graus

Просто чтобы добавить, вам нужно включить пространство имен Linq, чтобы этот материал начал работать, иначе у вас будет класс списка, но не эти операторы

List<int> studentIdList = new List<int>(); 


Кроме того, это не имеет никакого смысла. Установите для него значение null, если вам нужно установить его внутри области видимости. Ваш код устанавливает его снова и снова и ничего с ним не делает? Фактически, ваш код не будет компилироваться. Публикуйте реальный код, когда задаете вопрос....


BillWoodruff

+4 для противодействия незаслуженную вниз-голосование

Christian Graus

Овации

Рейтинг:
0

Maciej Los

Этот фрагмент кода мне непонятен:

List<int> studentIdList = new List<int>();

foreach (var student in studentClassList )
{
studentIdList = _context.Student.Where(st => st.Id == student.StudentId).ToList();
}


Если вы хотите получить список студентов в определенном классе, вы должны сделать что-то вроде этого:
var studentsinclass = _context.Student
    .Where(st => _context.StudentClass
        .Any(sc => sc.ClassId == 1 && st.Id == sc.StudentId))
    .ToList();


Удачи вам!


BillWoodruff

Привет Мацей, использование 'Any в вашем последнем примере вернет bool, если какой-либо элемент совпадает ... Я не думаю, что это то, что вы действительно хотите здесь.

твое здоровье, Билл

Maciej Los

Билл, взгляни еще раз на пример. "Любой" метод используется в качестве условия для "Где".
В любом случае, спасибо за ваш комментарий.
Овации,
Мацей

BillWoodruff

Ладно, я перекалибровке ... Спасибо!