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); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д