Krok pierwszy z poprzedniego postu. (ctr+c => ctr+f).
Stworzyłem klasę OneFilter z metodą searchData. Jest to pierwszy krok więc zrobiłem to nie patrząc na solida.
public class OneFilter
   
{
       
public void searchData(string param1, ref List<ExtModelRegistrationList> result)
       
{
            if (!string.IsNullOrEmpty(param1))
            {
                using (var db = new EntitiesMaraton())
                {
                    var oneColumn =
result.Select(x => new
                    {
                        imie = x.imie,
                        nazwisko = x.nazwisko,
dane = x.imie + " " + x.nazwisko + " " + x.grupa + " " + x.dystans + " " + "rezerwa
" +
x.rezerwa + " " + "opłacono " + x.oplacony
                    }).ToList();
                    oneColumn =
oneColumn
                               .Where(x => x.dane.Contains(param1)).ToList();
result = result
       .Where(x => oneColumn
       .Any(y => y.imie ==
x.imie && y.nazwisko == x.nazwisko)).ToList();
                }
            }
       
}
    }
W czasie testów wyszło, że nie zawsze wyszuka poprawnie zadaną wartość. 
Pomysłem na to będzie wyszukanie danej frazy osobno w każdej kolumnie i 
doklejanie wyników (rekordów) do siebie.Opcja numer dwa
Różnica parametr "param1" rozbity został na listę string-ów, a ta lista została porównana z "OneColumn".
public void searchDataFromFilter(string param1, ref List<ExtModelRegistrationList> result)
        {
            if (!string.IsNullOrEmpty(param1))
            {
                using (var db = new EntitiesMaraton())
                {
                    var oneColumn =
result.Select(x => new
                    {
                        imie
= x.imie,
                       
nazwisko = x.nazwisko,
dane =
x.imie + "
" +
x.nazwisko + " " + x.grupa + " " + x.dystans + " " + "rezerwa
" +
x.rezerwa + " " + "opłacono " + x.oplacony
                   
}).ToList();
                    var tabParam =
param1.Split(' ').ToList();
tabParam
= tabParam
                             .Where(x => !string.IsNullOrWhiteSpace(x)).Distinct().ToList();
oneColumn = oneColumn
                             .Where(x => tabParam.Any(y =>x.dane.Contains(y))).ToList();
result = result
.Where(x => oneColumn
.Any(y => y.imie == x.imie && y.nazwisko ==
x.nazwisko)).ToList();
                }
            }
        }
Różnica w wynikach może być znaczna będzie to widoczne przy większej ilości parametrów (wyrażeń w parametrze oddzielonych spacjami). W metodzie pierwszej szukam w kolumnie dane pasującej wartości parametru, w drugiej metodzie rozbiłem parametr param1 na listę parametrów i przeszukuje każdym elementem z listy osobno.Miałem mało testerów, a jestem leniwy to nie chciało mi się wpisywać danych więc zrobiłem funkcje generujące imię, nazwisko, email (słowo generujące to trochę nadużycie).
Funkcje generujące nazwisko i adres mail są słabe, trzeba by je dopracować.
public void testAdd()
        {
            try
            {
                using (var db = new EntitiesMaraton())
                {
                    Random _gr = new Random();
                    Random _ds = new Random();
                    kartoteka2 test1 = new kartoteka2();
                    for (int i = 0; i < 30;
i++)
                    {
                        test1.grup_id = _gr.Next(1, 3);
                       
test1.kart_imie = RandomStringNameDictionary();
                       
test1.kart_nazwisko = RandomStringSurnameDictionary(6, "");
                       
test1.kart_email = RandomStringEmailDictionary(6, "");
                       
test1.dys_id = _ds.Next(1, 7);
                       
test1.plec_id = 1;
                       
test1.kart_dataUr = DateTime.Parse("1981-09-01");
                       
test1.kart_telefon = "123456789";
                        test1.kart_uwagi = "test";
                       
test1.kart_dataRej = DateTime.Now;
                       
test1.kart_wpis_rejestacja = true;
                       
test1.kart_wpis_oplata = false;
                       
test1.kart_wpis_rezerwowa = true;
                       
db.kartoteka2.Add(test1);
                       
db.SaveChanges();
                    }
                }
            }
            catch (Exception ex)
            {
                string er = ex.InnerException.Message;
            }
        }
Prawie Generator losowych emaili.
Generator losowych nazwisko (prawie). Metoda jest bardzo słaba jak ktoś chce mieć bajzel to może być ale żeby generować mądrzejsze nazwisko trzeba by się bardziej napocić, z drugiej strony ktoś  się może obrazić odnajdując swoje nazwisko. Funkcja ta stworzona z lenistwa żeby nie musieć insertów robić ręcznie, to samo tyczy się emaila.
public string RandomStringEmailDictionary(int lengthSName, string Sname)
        {
            Random random = new Random();
            Dictionary<int, string> lista = new Dictionary<int, string>();
            lista.Add(1, "ma");
            lista.Add(2, "sza");
            lista.Add(3, "ko");
            lista.Add(4, "wa");
            lista.Add(5, "pie");
            lista.Add(6, "ra");
            lista.Add(7, "ka");
            lista.Add(8, "ju");
            lista.Add(9, "nek");
            lista.Add(10, "po");
            lista.Add(11, "go");
            lista.Add(12, "tka");
            lista.Add(13, "ra");
            lista.Add(14, "ka");
            int key = random.Next(1,
13);
           
System.Threading.Thread.Sleep(250);
            if (Sname.Length >=
lengthSName)
            {
                Sname += "@.hw7.pl";
                return Sname;
            }
            else
            {
                Sname +=
lista.Where(x => x.Key == key).FirstOrDefault().Value;
                return
RandomStringEmailDictionary(lengthSName, Sname);
            }
        }
public string RandomStringSurnameDictionary(int lengthSName,string Sname)
        {
            Random random = new Random();
            Dictionary<int, string> lista = new Dictionary<int, string>();
            lista.Add(1, "ma");
            lista.Add(2, "sza");
            lista.Add(3, "ko");
            lista.Add(4, "wa");
            lista.Add(5, "pie");
            lista.Add(6, "ra");
            lista.Add(7, "ka");
            lista.Add(8, "ju");
            lista.Add(9, "nek");
            lista.Add(10, "po");
            lista.Add(11, "go");
            lista.Add(12, "tka");
            lista.Add(13, "ra");
            lista.Add(14, "ka");
            int key = random.Next(1,
13);
           
System.Threading.Thread.Sleep(200);
            if (Sname.Length >=
lengthSName)
            {
                return Sname;
            }
            else
            {
                Sname +=
lista.Where(x => x.Key == key).FirstOrDefault().Value;
                return RandomStringSurnameDictionary(lengthSName,
Sname);
            }
        }
Wybieranie imion:
public string RandomStringNameDictionary()
        {
            Random random = new Random();
            Dictionary<int, string> lista = new Dictionary<int, string>();
            lista.Add(1, "Marcin");
            lista.Add(2, "Grzegorz");
            lista.Add(3, "Zbgniew");
            lista.Add(4, "Mateusz");
            lista.Add(5, "Monika");
            lista.Add(6, "Magda");
            lista.Add(7, "Sylwester");
            lista.Add(8, "Michał");
            lista.Add(9, "Tomasz");
            lista.Add(10, "Sylwia");
            lista.Add(11, "Irena");
            lista.Add(12, "Antoni");
            lista.Add(13, "Marysia");
            lista.Add(14, "Jan");
            int key = random.Next(1, 13);
            string sname =
lista.Where(x => x.Key == key ).FirstOrDefault().Value;
            if (string.IsNullOrEmpty(sname))
            {
               
RandomStringNameDictionary();
                return sname;
            }
            else
            {
                return sname;
            }
        }
Testy. cdn...
 
Brak komentarzy:
Prześlij komentarz