class Ogrenci { private int ogrNo; private string isim; private int not1; private int not2; public int OgrNo { get; set; } public string Isim { get; set; } public double Not1 { get; set; } public double Not2 { get; set; } }
static void Main(string[] args) { List<Ogrenci> ogrListesi = new List<Ogrenci> { new Ogrenci{OgrNo = 1, Isim = "Ahmet", Not1=85, Not2=75}, new Ogrenci{OgrNo = 2, Isim = "Alper", Not1=95, Not2=50}, new Ogrenci{OgrNo = 3, Isim = "Emin", Not1=70, Not2=20} }; ogrListesi.ForEach(x => Console.WriteLine(x.Isim)); var yeniliste = from x in ogrListesi where x.Not1 > 80 & x.Not2 > 70 select x; // yeniliste = from x in yeniliste where x.Not2 > 70 select x; Console.WriteLine(""); foreach (var item in yeniliste) { Console.WriteLine("Orgenci adı: {0} , Aldığı 1. not: {1} ve 2. not {2}", item.Isim, item.Not1, item.Not2); } Console.ReadLine(); }

Basit yazılmıştır tasarım deseni yoktur, RAM’deki listeden veri filtreleme işlemi için kullanılabilir.
Buna bir de Prototype Design Pattern ile düzenleyelim.
//Ogrenci.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace denemeler { abstract class Ogrenci { private int ogrNo; private string isim; private int not1; private int not2; public int OgrNo { get; set; } public string Isim { get; set; } public double Not1 { get; set; } public double Not2 { get; set; } public abstract Ogrenci Clone(); } }
//OgrenciFiltrele.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace denemeler { class OgrenciFiltrele : Ogrenci { public override Ogrenci Clone() { return (Ogrenci)this.MemberwiseClone(); } private List<OgrenciFiltrele> ogrencis; public List<OgrenciFiltrele> Ogrencis { get => ogrencis; set => ogrencis = value; } public void Filtreli(List<OgrenciFiltrele> ogrListesi, int? filtre1, int? filtre2) { var yeniliste = from x in ogrListesi select x; if (filtre1 != null) { yeniliste = from x in yeniliste where x.Not1 > filtre1 select x; } if (filtre2 != null) { yeniliste = from x in yeniliste where x.Not2 > filtre2 select x; } Ogrencis = yeniliste.ToList(); } } }
//Program.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace denemeler { class Program { static void Main(string[] args) { List<OgrenciFiltrele> ogrListesi = new List<OgrenciFiltrele> { new OgrenciFiltrele{OgrNo = 1, Isim = "Ahmet", Not1=88, Not2=74}, new OgrenciFiltrele{OgrNo = 2, Isim = "Alper", Not1=95, Not2=76}, new OgrenciFiltrele{OgrNo = 3, Isim = "Emin", Not1=70, Not2=20} }; OgrenciFiltrele filtrelenmis = new OgrenciFiltrele(); int? filtre1 = 85; int? filtre2 = null;//75 filtrelenmis.Filtreli(ogrListesi, filtre1, filtre2); Console.WriteLine(""); foreach (var item in filtrelenmis.Ogrencis) { Console.WriteLine("Orgenci adı: {0} , Aldığı 1. not: {1} ve 2. not {2}", item.Isim, item.Not1, item.Not2); } Console.ReadLine(); } } }
nullable değerleri MVC için ekledim. Birden fazla arama değişkeninin girilebildiği yerlerde tek değerin girilmesi durumunda boş filtreler null döner.