Делает ли в linq, где создает новый экземпляр объекта

В приведенном ниже коде почему filteredStudentNames содержит только 2 элемента. Насколько я понимаю, это ссылочный тип, поэтому, когда я обновляю объект studentList еще одним элементом, результаты также должны быть частью filteredStudentNames.

В случае объекта studentNames я также получаю обновленную запись. Так почему бы не в случае с filteredStudentnames?

static void Main(string[] args)
    {
        IList<Student> studentList = new List<Student>() {
                    new Student() { StudentID = 1, StudentName = "John", age = 18 } ,
                    new Student() { StudentID = 2, StudentName = "Steve",  age = 21 } ,
                    new Student() { StudentID = 3, StudentName = "Bill",  age = 18 } ,
                    new Student() { StudentID = 4, StudentName = "Ram" , age = 20  } ,
                    new Student() { StudentID = 5, StudentName = "Ron" , age = 21 }
                };

        var filteredStudentNames = from s in studentList 
                                   where s.age > 20
                                   select s;

        var studentNames = from s in studentList
                           select s;

        IList<Student> stud = studentList;
        studentList.Add(new Student { StudentID = 27, StudentName = "Test" });

У вашего filteredStudentNames запрашивается s.age > 20, поэтому он не существует

Hary 31.10.2018 11:54

LINQ использует отложенное выполнение. Созданные запросы выполняются только тогда, когда вы выполняете для них foreach или используете другие методы выполнения (например, ToList или FirstOrDefault).

dymanoid 31.10.2018 11:54

Также вы не добавляете нового ученика старше 20 лет. Сид ты пробовал?

Chetan 31.10.2018 11:56

Возможно опечатка - вы хотели написать studentList.Add(new Student { StudentID = 6, StudentName = "Test", age=27 });

Ofir Winegarten 31.10.2018 11:57

Офир прав, это просто вопрос с опечаткой и его можно закрыть. Если у OP возникла реальная проблема, ему нужно показать реальный код.

Tim Schmelter 31.10.2018 12:07

@TimSchmelter Да, сэр ... это была опечатка ...

Saurabh 31.10.2018 15:05
2
6
144
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я почти уверен, что это сработает для вас.

static void Main(string[] args)
{
    IList<Student> studentList = new List<Student>() {
                new Student() { StudentID = 1, StudentName = "John", age = 18 } ,
                new Student() { StudentID = 2, StudentName = "Steve",  age = 21 } ,
                new Student() { StudentID = 3, StudentName = "Bill",  age = 18 } ,
                new Student() { StudentID = 4, StudentName = "Ram" , age = 20  } ,
                new Student() { StudentID = 5, StudentName = "Ron" , age = 21 }
            };

    var filteredStudentNames = from s in studentList where s.age > 20
                       select s;

    var studentNames = from s in studentList
                       select s;

    IList<Student> stud = studentList;
    studentList.Add(new Student { StudentID = 27, StudentName = "Test", age = 25 });


    var filteredStudentNames = from s in studentList where s.age > 20
                       select s;

}

Вы должны выполнить ссылку после добавления новой записью, и вы должны добавить возраст для новой записи. Спасибо.

You have to execute link after the adding by new entry. Нет, не знаешь. stackoverflow.com/questions/7324033/… Также ваш код не компилируется.
mjwills 31.10.2018 12:02
Ответ принят как подходящий

filteredStudentNames запрашивается с условием age > 20. При добавлении нового студента вы не инициировали свойство age, что означает, что по умолчанию оно равно 0.

Так что в filteredStudentNames это не отражается

Попробуйте запустить свойство age, а затем запросите Count

studentList.Add(new Student { StudentID = 6, StudentName = "Test", age = 21 });

Считать:

Console.WriteLine("filteredStudentNames: " + filteredStudentNames.Count()); //Output: 3
Console.WriteLine("studentNames: " + studentNames.Count());   //Output: 6
StudentID = 27, вероятно, опечатка, в этом примере должен быть ID 6, а возраст - 27.
Tim Schmelter 31.10.2018 12:06

@TimSchmelter, да. так и должно быть, я просто повторно использовал пример, как в вопросе.

Hary 31.10.2018 12:08

@ mbharanidharan88 Спасибо .. это была опечатка .. глупая ошибка.

Saurabh 31.10.2018 15:06

Другие вопросы по теме