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