LINQ to Objects - не работает код. Ошибок нет, компилирует, но не ищет - C#

Узнай цену своей работы

Формулировка задачи:

Не могу понять, почему не работает этот код Ошибок не дает, компилирует, а не ищет
public void SurnameSearchLINQ()
    {
        string key;
        Console.Write("Введите ключ для поиска: ");
        key = Console.ReadLine();
 
        var query = from Student stud in name
                    where stud.surname == key
                    where stud.faculty == key
                    select stud;
        foreach (Student s in query)
            Console.WriteLine(s.name + s.surname + s.faculty);
 
    }

Решение задачи: «LINQ to Objects - не работает код. Ошибок нет, компилирует, но не ищет»

textual
Листинг программы
using System.Runtime.InteropServices;
using System;
using System.IO;
using System.Collections;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Xml.Serialization;
using System.Collections.Generic;
using System.Linq;
 
 
 
/** Структура, яка забезпечує представлення дати у вигляді місяця і року
    * 
    */
 
struct yearMonth
{
    public int month;
    public int year;
}
 
/** Класс, який забезпечує існування ієрархії програми
    * 
    */
 
class ListOfVuz : ArrayList
{
 
}
 
/** Класс, який забезпечує представлення об'єктів типу ВУЗ
    * 
    */
 
public class Vuz : ArrayList
{
    public string vuzName;
 
}
 
/** Класс, який забезпечує представлення об'єктів типу Студент
    * 
    */
 
[Serializable]
public class Student
{    /// Им'я студента
    public string name;
    /// Прізвище студента
    public string surname;
    /// Спеціальність студента
    public string speciality;
    /// Індекс групи студента
    public string index;
    /// Факультет студента
    public string faculty;
 
    /// День народження 
    public int dayOfBirth;
    /// Місяць народження 
    public int monthOfBirth;
    /// Рік народження 
    public int yearOfBirth;
 
    /// День вступу
    public int dayOfEnter;
    /// Місяць вступу
    public int monthOfEnter;
    /// Рік вступу
    public int yearOfEnter;
 
    /// Успішність студента 
    public float progress;
 
    /// Назва групи
    public string group;
 
    /// Номер семестру
    public int semester;
 
    /// Номер курсу
    public int course;
 
    public Student()
    { }
 
}
 
 
/** Класс, який забезпечує реалізацію всіх функцій
    * 
    */
class Functions
{
    [DllImport("msvcrt")]
    static extern int _getch();
 
    public static int[] monthes = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
 
    Vuz name = new Vuz();
 
    public static void Serialize(ListOfVuz data, string file)
    {
        TextWriter x = new StreamWriter(file);
        XmlSerializer q = new XmlSerializer(typeof(Student));
        foreach (Vuz n in data)
 
            foreach (Student k in n)
                q.Serialize(x, k);
        x.Close();
    }
 
    //public static void DeSerialize(string file)
    //{
    //    Student i = new Student();
    //    TextReader x = new StreamReader(file);
    //    XmlSerializer q = new XmlSerializer(typeof(Student));
    // //while (x.)
    //    i = (Student)q.Deserialize(x);
 
    //}
 
 
    ///** Функція, яка забезпечує серіалізацію даних
    //   * 
    //   */
 
    //public static byte[] Serialize(Student reserve)
    //{
    //    BinaryFormatter formatter = new BinaryFormatter();
    //    MemoryStream stream = new MemoryStream();
    //    formatter.Serialize(stream, reserve);
    //    return stream.ToArray();
    //}
    ///** Функція, яка забезпечує десеріалізацію даних
    //   * 
    //   */
    //public Student ConverByteArreyToData(byte[] binaryData)
    //{
    //    BinaryFormatter formatter = new BinaryFormatter();
    //    MemoryStream ms = new MemoryStream(binaryData);
    //    return (Student)formatter.Deserialize(ms);
    //}
 
 
    /** Функція, яка забезпечує введення даних з клавіатури до колекції
       * 
       */
    public Student Input()
    {
 
        Student student = new Student();
 
        Console.WriteLine("Введите имя:");
        student.name = Console.ReadLine();
        Console.WriteLine("Введите фамилию:");
        student.surname = Console.ReadLine();
 
        Console.WriteLine("Введите факультет:");
        student.faculty = Console.ReadLine();
        Console.WriteLine("Введите специальность:");
        student.speciality = Console.ReadLine();
        Console.WriteLine("Введите индекс группы:");
        student.index = Console.ReadLine();
 
        Console.WriteLine("Введите день рождения:");
        student.dayOfBirth = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine("Введите месяц рождения:");
        student.monthOfBirth = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine("Введите год рождения:");
        student.yearOfBirth = Convert.ToInt32(Console.ReadLine());
 
        Console.WriteLine("Введите день поступления:");
        student.dayOfEnter = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine("Введите месяц поступления:");
        student.monthOfEnter = Convert.ToInt32(Console.ReadLine());
        Console.WriteLine("Введите год поступления:");
        student.yearOfEnter = Convert.ToInt32(Console.ReadLine());
 
        Console.WriteLine("Введите успеваемость студента (в процентах):");
        student.progress = Convert.ToSingle(Console.ReadLine());
 
        student.group = student.faculty + student.speciality + (student.yearOfEnter - 2010) + student.index;
 
        student.course = (DateTime.Today.Year - student.yearOfEnter);
        if (DateTime.Today.Month > 8)
            student.course++;
 
        student.semester = 1;
        if (DateTime.Today.Month < 9)
            student.semester++;
        return student;
 
    }
 
    /** Функція, яка забезпечує виведення інформації на екран
    * 
    */
    public void Show(Vuz z)
    {
        yearMonth x = new yearMonth();
 
        Console.Clear();
        foreach (Student stud in z)
        {
            x = Functions.countDate(stud.monthOfBirth, stud.yearOfBirth);
            Console.WriteLine("Имя: {0} Фамилия: {1} Факультет:{2} \nСпециальность:{3} Индекс:{4} \nДата рождения:{5}.{6}.{7} \nДата поступления:{8}.{9}.{10} \nУспеваемость {11}% \nГруппа: {12} \nВозраст: {13} лет {14} месяцев\nКурс: {15}\nСеместр: {16}",
                stud.name, stud.surname, stud.faculty, stud.speciality, stud.index, stud.dayOfBirth, stud.monthOfBirth, stud.yearOfBirth, stud.dayOfEnter, stud.monthOfEnter, stud.yearOfEnter, stud.progress, stud.group, x.year, x.month, stud.course, stud.semester);
            Console.WriteLine();
 
        }
        _getch();
    }
 
    /** Функція, яка забезпечує додавання студентів до коллекції
    * 
    */
    public int Add(Vuz first)
    {
        Console.Clear();
        int StudCount;
        Console.WriteLine("Введите количество студентов:");
        StudCount = Convert.ToInt32(Console.ReadLine());
        for (int i = 1; i <= StudCount; i++)
        {
            first.Add(Input());
        }
        return StudCount;
    }
 
    /** Функція, яка забезпечує пошук у колекції по прізвищу
    * 
    */
    public void SurnameSearch(Vuz first)
    {
        Console.Clear();
        string key;
        Console.Write("Введите фамилию студента: ");
        key = Console.ReadLine();
        byte found = 0;
        foreach (Student stud in first)
        {
            if (stud.surname == key)
            {
                Console.WriteLine("\nТакой студент существует в этом вузе:");
                found++;
 
                Console.WriteLine("\nИмя: {0} Фамилия: {1} Факультет:{2} \nСпециальность:{3} Индекс:{4} \nДата рождения:{5}.{6}.{7} \nДата поступления:{8}.{9}.{10}  \nУспеваемость {11}% \nГруппа {12} ",
                stud.name, stud.surname, stud.faculty, stud.speciality, stud.index, stud.dayOfBirth, stud.monthOfBirth, stud.yearOfBirth, stud.dayOfEnter, stud.monthOfEnter, stud.yearOfEnter, stud.progress, stud.group);
            }
        }
        if (found == 0)
            Console.WriteLine("Такой студент не существует в этом вузе!");
        _getch();
    }
 
    /** Функція, яка забезпечує пошук у колекції по назві групи
    * 
    */
 
    public void GroupSearch(Vuz first)
    {
        Console.Clear();
        string key;
 
        Console.Write("Введите группу: ");
        key = Console.ReadLine();
 
        int found = 0;
        int summAge = 0;
        float summProgress = 0;
        int currentIndex = 0;
        var indexes = new List<int>();
        foreach (Student stud in first)
        {
            if (stud.group == key)
            {
                found++;
                indexes.Add(currentIndex);
                summAge = summAge + Functions.countDate(stud.monthOfBirth, stud.yearOfBirth).year;
                summProgress = summProgress + stud.progress;
                Console.WriteLine("Имя: {0} Фамилия: {1} Факультет: {2} \nСпециальность: {3} \nУспеваемость {4}% ",
              stud.name, stud.surname, stud.faculty, stud.speciality, stud.progress);
            }
            currentIndex++;
        }
        Console.WriteLine("Удалить данные по всей группе? (y/n)");
 
 
 
 
        char ch = Console.ReadKey().KeyChar;
        while (ch != 'n' || ch != 'y')
        {
            switch (ch)
            {
                case 'n':
                    break;
                case 'y':
                    foreach (int index in indexes)
                    {
                        first.RemoveAt(index);
                    }
                    break;
                case 'q':
                    return;
            }
            ch = Console.ReadKey().KeyChar;
        }
 
        if (found == 0)
            Console.WriteLine("Такой студент не существует в этом вузе!");
        else Console.WriteLine("Средний возраст:{0}, Средняя успеваемость: {1}", summAge / found, summProgress / found);
        _getch();
    }
 
    /** Функція, яка забезпечує пошук у колекції по спеціальності
    * 
    */
    public void SpecSearch(Vuz first)
    {
        Console.Clear();
        string key;
        int summAge = 0;
        float summProgress = 0;
        Console.Write("Введите специальность: ");
        key = Console.ReadLine();
        byte found = 0;
        foreach (Student stud in first)
        {
            if (stud.speciality == key)
            {
 
                found++;
                summAge = summAge + Functions.countDate(stud.monthOfBirth, stud.yearOfBirth).year;
                summProgress = summProgress + stud.progress;
 
                Console.WriteLine("\nИмя: {0} Фамилия: {1} Факультет:{2} \nСпециальность:{3} \nУспеваемость {4}% ",
                stud.name, stud.surname, stud.faculty, stud.speciality, stud.progress);
            }
        }
        if (found == 0)
            Console.WriteLine("Такая специальность не существует в этом вузе!");
        else Console.WriteLine("Средний возраст:{0}, Средняя успеваемость: {1}", summAge / found, summProgress / found);
 
        _getch();
    }
    /** Функція, яка забезпечує пошук у колекції по назві факультета
    * 
    */
    public void FacSearch(Vuz first)
    {
        Console.Clear();
        string key;
        Console.Write("Введите факультет: ");
        key = Console.ReadLine();
        byte found = 0;
        int summAge = 0;
        float summProgress = 0;
        foreach (Student stud in first)
        {
            if (stud.faculty == key)
            {
                //Console.WriteLine("\nТакой факультет существует в этом вузе:");
                found++;
                summAge = summAge + Functions.countDate(stud.monthOfBirth, stud.yearOfBirth).year;
                summProgress = summProgress + stud.progress;
                Console.WriteLine("\nИмя: {0} Фамилия: {1} Факультет:{2} \nСпециальность:{3} \nУспеваемость {4}% ",
                stud.name, stud.surname, stud.faculty, stud.speciality, stud.progress);
            }
        }
        if (found == 0)
            Console.WriteLine("Такой факультет не существует в этом вузе!");
        else Console.WriteLine("Средний возраст:{0}, Средняя успеваемость: {1}", summAge / found, summProgress / found);
 
        _getch();
    }
    /** Функція, яка забезпечує збереження даних у текстовий файл
   * 
   */
    public void Save(ListOfVuz second)
    {
 
        StreamWriter fs = new StreamWriter("E:\\file.txt");
 
        Console.Clear();
        foreach (Vuz first in second)
        {
            fs.WriteLine("{0}", first.vuzName);
            fs.WriteLine("{0}", first.Count);
            foreach (Student stud in first)
            {
                fs.WriteLine("{0} {1} {2} {3} {4} {5}.{6}.{7} {8}.{9}.{10} {11} {12} {13} {14} ",
                    stud.name, stud.surname, stud.faculty, stud.speciality, stud.index, stud.dayOfBirth, stud.monthOfBirth, stud.yearOfBirth, stud.dayOfEnter, stud.monthOfEnter, stud.yearOfEnter, stud.progress, stud.group, stud.course, stud.semester);
 
            }
        }
        fs.Close();
        _getch();
    }
    /** Функція, яка забезпечує зчитування даних з текстового файлу та лолавання їх у існуючу колекцію
   * 
   */
    public void Read(ListOfVuz first)
    {
        first.Clear();
        Vuz q = new Vuz();
        string[] Vname;
        string[] strArr;
        string[] fifth;
        string readed;
        int studCount;
        StreamReader fs = new StreamReader("E:\\file.txt");
        Console.Clear();
        while (fs.EndOfStream != true)
        {
            studCount = Convert.ToInt32(fs.ReadLine());
            for (int i = 0; i < studCount; i++)
            {
                q.vuzName = fs.ReadLine();
                Vname = q.vuzName.Split(' ');
                q.vuzName = Vname[0];
            }
 
 
            for (int i = 0; i < studCount; i++)
            {
 
                Student stud = new Student();
                readed = fs.ReadLine();
                strArr = readed.Split(' ');
 
                stud.name = strArr[0];
                stud.surname = strArr[1];
                stud.faculty = strArr[2];
                stud.speciality = strArr[3];
                stud.index = strArr[4];
                fifth = strArr[5].Split('.');
                stud.dayOfBirth = Convert.ToInt32(fifth[0]);
                stud.monthOfBirth = Convert.ToInt32(fifth[1]);
                stud.yearOfBirth = Convert.ToInt32(fifth[2]);
                fifth = strArr[6].Split('.');
                stud.dayOfEnter = Convert.ToInt32(fifth[0]);
                stud.monthOfEnter = Convert.ToInt32(fifth[1]);
                stud.yearOfEnter = Convert.ToInt32(fifth[2]);
                stud.progress = Convert.ToSingle(strArr[7]);
                stud.group = strArr[8];
                stud.course = Convert.ToInt32(strArr[9]);
                stud.semester = Convert.ToInt32(strArr[10]);
                //q.vuzName = strArr[11];
                q.Add(stud);
            }
            first.Add(q);
        }
        fs.Close();
        _getch();
    }
    /** Функція, яка забезпечує редагування даних елементу колекції
   * 
   */
    public void Edit(Vuz first)
    {
        Console.WriteLine("Введите фамилию для редактирования: ");
        string key = Console.ReadLine();
        int number = -1;
        foreach (Student stud in first)
        {
            number++;
 
            if (stud.surname == key)
            {
                Console.WriteLine("Имя: {0} Фамилия: {1} Факультет:{2} \nСпециальность:{3} Индекс:{4} \nДата рождения:{5}.{6}.{7} \nДата поступления:{8}.{9}.{10} \nУспеваемость {11}% \nГруппа: {12}",
                    stud.name, stud.surname, stud.faculty, stud.speciality, stud.index, stud.dayOfBirth, stud.monthOfBirth, stud.yearOfBirth, stud.dayOfEnter, stud.monthOfEnter, stud.yearOfEnter, stud.progress, stud.group);
                Console.WriteLine();
                Console.WriteLine("Редактировать? 0 - нет, 1 - да");
                int answer = Convert.ToInt32(Console.ReadLine());
                if (answer == 1)
                {
                    first.RemoveAt(number);
                    // Редактирование студента
                    Console.WriteLine("Фамилия: ");
                    stud.surname = Console.ReadLine();
                    Console.WriteLine("Имя: ");
                    stud.name = Console.ReadLine();
                    Console.WriteLine("Факультет: ");
                    stud.faculty = Console.ReadLine();
                    Console.WriteLine("Специальность: ");
                    stud.speciality = Console.ReadLine();
                    Console.WriteLine("Индекс группы: ");
                    stud.index = Console.ReadLine();
                    Console.WriteLine("День рождения: ");
                    stud.dayOfBirth = Convert.ToInt32(Console.ReadLine());
                    Console.WriteLine("Месяц рождения: ");
                    stud.monthOfBirth = Convert.ToInt32(Console.ReadLine());
                    Console.WriteLine("Год рождения: ");
                    stud.yearOfBirth = Convert.ToInt32(Console.ReadLine());
                    Console.WriteLine("День поступления: ");
                    stud.dayOfEnter = Convert.ToInt32(Console.ReadLine());
                    Console.WriteLine("Месяц поступления : ");
                    stud.monthOfEnter = Convert.ToInt32(Console.ReadLine());
                    Console.WriteLine("Год поступления: ");
                    stud.yearOfEnter = Convert.ToInt32(Console.ReadLine());
                    Console.WriteLine("Успеваемость: ");
                    stud.progress = Convert.ToSingle(Console.ReadLine());
 
                    first.Add(stud);
                    return;
                }
                else continue;
            }
        }
        Console.WriteLine("Такой студент не существует");
    }
    /** Функція, яка забезпечує видалення елементу колекції
   * 
   */
    public void Remove(Vuz first)
    {
        Console.WriteLine("Введите фамилию студента для удаления его данных: ");
        string key = Console.ReadLine();
        int number = -1;
        foreach (Student stud in first)
        {
            number++;
            if (stud.surname == key)
            {
                Console.WriteLine("Имя: {0} Фамилия: {1} Факультет:{2} \nСпециальность:{3} Индекс:{4} \nДата рождения:{5}.{6}.{7} \nДата поступления:{8}.{9}.{10} \nУспеваемость {11}% \nГруппа: {12}",
                    stud.name, stud.surname, stud.faculty, stud.speciality, stud.index, stud.dayOfBirth, stud.monthOfBirth, stud.yearOfBirth, stud.dayOfEnter, stud.monthOfEnter, stud.yearOfEnter, stud.progress, stud.group);
                Console.WriteLine();
                Console.WriteLine("Вы хотите удалить данные этого студента? 0 - нет, 1 - да");
                int answer = Convert.ToInt32(Console.ReadLine());
                if (answer == 1)
                {
                    first.RemoveAt(number);
                    return;
                }
 
                else continue;
            }
        }
        Console.WriteLine("Такой студент не существует");
 
    }
    /** Функція, яка забезпечує представлення представлення одного з підпунктів меню
  * 
  */
    public void MainMenu(ListOfVuz l)
    {
        bool ques = false;
        Console.Clear();
        while (true)
        {
            Console.WriteLine("Меню:\n\t1 - Добавить новый ВУЗ\n\t2 - Сохранить данные ВУЗа\n\t3 - Прочитать данные ВУЗа из файла\n\t4 - Редактирование данных ВУЗа\n\t5 - Выход\n\t6 - Сериализация");
            int key = Convert.ToChar(_getch());
            switch (key)
            {
                case '1':
                    Vuz f = new Vuz();
                    Console.WriteLine("Введите название ВУЗа:");
                    f.vuzName = Console.ReadLine();
                    l.Add(f);
                    break;
                case '2':
                    Save(l);
                    break;
                case '3':
                    Read(l);
                    break;
                case '4':
                    Console.WriteLine("Введите название ВУЗа:");
                    string nameOfVuz = Console.ReadLine();
                    foreach (Vuz t in l)
                    {
                        if (nameOfVuz == t.vuzName)
                        {
                            Menu(t);
                            ques = true;
                            Console.Clear();
                        }
                    }
                    if (ques == false)
                        Console.WriteLine("ВУЗ не найден");
                    break;
                case '5':
                    Environment.Exit(0);
                    break;
                case '6':
                    Functions.Serialize(l, @"E:\name.xml");
                    break;
                //case '7':
                //    Functions.DeSerialize(@"E:\name.xml");
                //    break;
 
            }
        }
    }
 
    /** Функція, яка забезпечує вирахування віку студента
    * 
    */
    public static yearMonth countDate(int monthOfBirth, int yearOfBirth)
    {
        /// Поточна дата
        System.DateTime date = DateTime.Now;
 
        yearMonth q = new yearMonth();
 
        //int day = date.Day;
 
        int month = date.Month;
        int year = date.Year;
 
        //int day1;
 
        int month1;
        int year1;
        int borrow;
 
        month1 = month - monthOfBirth;
        if (month1 < 0)
        {
            month1 = 12 + month1;
            borrow = 1;
        }
        else borrow = 0;
 
        year1 = year - yearOfBirth - borrow;
        q.month = month1;
        q.year = year1;
        return q;
    }
 
    /** Функція, яка забезпечує представлення представлення одного з підпунктів меню
  * 
  */
    public void Search(Vuz k)
    {
 
        while (true)
        {
            Console.Clear();
            Console.WriteLine("\t1 - Поиск по фамилии\n\t2 - Поиск по группе\n\t3 - Поиск по специальности\n\t4 - Поиск по факультету\n\t5 - Вернуться");
            int key = Convert.ToChar(_getch());
            switch (key)
            {
                case '1':
                    SurnameSearch(k);
                    break;
                case '2':
                    GroupSearch(k);
                    break;
                case '3':
                    SpecSearch(k);
                    break;
                case '4':
                    FacSearch(k);
                    break;
                case '5':
                    return;
            }
        }
    }
 
    /** Функція, яка забезпечує представлення інтерактивного меню
    * 
    */
    public void Menu(Vuz k)
    {
        while (true)
        {
            Console.Clear();
            Console.WriteLine("Меню:\n\t1 - Добавить\n\t2 - Показать\n\t3 - Поиск\n\t4 - Редактирование\n\t5 - Удаление\n\t6 - Возврат в основное меню");
            // по фамилии\n\t4 - Поиск по группе\n\t5 - Поиск по специальности\n\t6 - Поиск по факультету
            int key = Convert.ToChar(_getch());
            switch (key)
            {
                case '1':
                    Add(k);
                    break;
                case '2':
                    Show(k);
                    break;
                case '3':
                    //Search
                    SurnameSearchLINQ();
                    break;
                case '4':
                    Edit(k);
                    break;
                case '5':
                    Remove(k);
                    break;
                case '6':
                    return;
            }
        }
    }
    public void SurnameSearchLINQ()
    {
        string key;
        Console.Write("Введите ключ для поиска: ");
        key = Console.ReadLine();
 
        var query = from Student stud in name
                    where stud.surname == key
                    //where stud.faculty == key
                    select stud;
        foreach (Student s in query)
            Console.WriteLine(s.name + s.surname + s.faculty);
 
    }
    public void Linq(Vuz k)
    {
 
        var query = from Student student in name
                    where student.progress > 50
                    select student;
        foreach (Student s in query)
            Console.WriteLine(s.name + ": " + s.progress);
 
    }
}
 
 
/** Класс, який забезпечує представлення функції Main()
    * 
    */
class Sample
{
    static void Main()
    {
        Functions prog = new Functions();
        ListOfVuz list = new ListOfVuz();
 
        prog.MainMenu(list);
 
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.917 из 5
Похожие ответы