Поиск по определенному или двум и более параметрам в List.Find - C#
Формулировка задачи:
Есть структура
организована с списке в классе-менеджера работы с записной книжкой
интересует момент как компактнее организовать поиск по разным полям структуры, внеся возможность поиска по нескольким полям одновременно.
public struct Note
{
//из списка группы
public string firstName; //имя
public string lastName; //фамилия
public ushort score; //успеваемость
}//класс - работа с блокнотом
public class NoteManager
{
List<Note> note; //записную книжку оформляю через список, обеспечивая тем самым работы с произвольным числом записей
//конструктор
public NoteManager()
{
note = new List<Note>();
note = FillNote.FillNote_(); //заполняю первоначальные поля в записную книжку
}
public void Find()
{
}
//добавление записи в блокнот
public void AddItem()
{
Note addNote = new Note();
Console.Write("Введите имя: ");
addNote.firstName = Console.ReadLine();
Console.Write("Введите фамилию: ");
addNote.lastName = Console.ReadLine();
Console.Write("Введите балл: ");
string stringE = Console.ReadLine();
addNote.score = ushort.Parse(stringE);
note.Add(addNote); //добаляю запись в список
Sort(); //сортирую после добавления(по фамилии)
}
public void DelItem()
{
note.Find()
}
//сортировка записей в блокноте по фамилии
public void Sort()
{
note.Sort((x, y) => x.lastName.CompareTo(y.lastName));
}
//вывод записей блокнота на экран
public void ShowNote()
{
note.ForEach(x => Console.WriteLine("{0}\t{1}\t{2}", x.firstName, x.lastName, x.score)); //Вывод на экран списка записей
}
}
Может у кого есть время высказать свои мысли? Я предполагаю, что надо делать дженерик делегат. Но не совсем понимаю как по нескольким параметрам поиск производить
Решение задачи: «Поиск по определенному или двум и более параметрам в List.Find»
textual
Листинг программы
var filtered = note;
if (!string.IsNullOrEmpty(fname)) filtered = filtered.Where(x=>x.firstName == fname);
if (!string.IsNullOrEmpty(lname)) filtered = filtered.Where(x=>x.lastName == lname);
filtered = filtered.Where(x=>x.score == score);
Console.WriteLine();
filtered.ToList().ForEach(x => Console.WriteLine("{0}\t{1}\t{2}", x.firstName, x.lastName, x.score));