Avatar billede tjakobsen Nybegynder
26. februar 2008 - 11:14 Der er 3 kommentarer og
1 løsning

Søg, sortere og presentere store mængder data.

Hej eksperter,

Jeg har i et stykke tid grublet lidt over hvordan man smartest laver en ASP.NET 2.0 C# side, der repræsenterer brugeren for et udtræk fra en database (typisk i et Gridview).
Som eksempel, siger vi, at brugeren har mulighed for, at få vist en oversigt over samtlige brugere i et bestemt miljø. Brugeren bliver bedt om at indtaste et brugernavn, eller en del af et brugernavn. Indtastes der fx ”con”, bliver alle brugere hvis brugernavn indeholder ”con”, vist i et Gridview.
Til dette forestiller jeg mig en metode i et data access layer, kaldet GetUsersByUsername(string username).
Man kan også søge på andre parameter, så vi har også følgende metoder:
GetUsersByFullName(string fullName);
GetUsersByNumber(int number);
GetAllUsers();
… osv.
Disse metoder returnerer en DataTable, som bliver bundet til et Gridview.
Hvis jeg så også vil have mulighed for, at sortere mit udtræk (ved at klikker på et kolonnenavn i Gridviewet), så skal jeg oprette yderligere  4 metoder:
GetUsersByUsernameAndSort(string username, string sortExpression, SortDirection direction);
GetUsersByFullName AndSort(string fullName, string sortExpression, SortDirection direction);
GetUsersByNumber AndSort(int number, string sortExpression, SortDirection direction);
GetAllUsers AndSort(string sortExpression, SortDirection direction);

Det første “problem”, er altså, at jeg vil ende med at få rigtig mange metoder, hvor I der star meget af det same.
Det andet problem er, at jeg skal holde styr på, om der er søgt på brugernavn, navn, nummer eller på alle brugere hver gang brugeren sorterer Gridviewet.
Og endvidere, hvis jeg giver brugeren mulighed for at søge på flere parameter, fx nummer og dato, så får jeg rigtig mange flere metoder:
GetUsersByNumber();
GetUsersByNumberAndDate();
GetUsersByNumberAndDateAndAlive();
GetUsersByNumberAndSort();
GetUsersByNumberAndDateAndSort();
GetUsersByNumberAndDateAndAliveAndSort();


Jeg arbejder med en kæmpe database hvor man skal have mulighed for at søge på rigtig mange kolonner i databasen, og mit spørgsmål er hvordan man går dette nemmest? Den metode jeg har illustreret her, håber jeg er besværlig – for ellers får jeg et kæmpe arbejde. Håber I kan komme med nogle gode råd.

På forhånd tak.
Avatar billede tjakobsen Nybegynder
11. marts 2008 - 15:01 #1
Ingen der kan fortælle mig lidt om hvordan man håndterer dette problem?
Avatar billede arne_v Ekspert
31. marts 2008 - 05:25 #2
Hvis du brugte en collection af objekter, så var det meget naturligt at
at flytte sorteringen op i lag (det kan muligvis også gøres med DataSet). Det
halverer da ihvertfald antallet af metoder.

I mange tilfælde er der ikke så mange relevante felter at søge på og så laver man
bare en metode for hver søgning.

Men er der mange kan man lave en enkelt metode som kan kalder med værdier for alle
felter men er null hvor de ikke er valgt og så kan man enten konstruere SQL synamisk
eller bruge fast SQL og parametere men med:
  felt=COALSECE(@p,felt=
som kriterier.
Avatar billede arne_v Ekspert
06. april 2008 - 06:24 #3
OK ?
Avatar billede tjakobsen Nybegynder
24. april 2008 - 20:18 #4
Hej Arne.

Beklager meget det sene svar - men jeg har været travlt optaget og havde helt glemt dette indlæg.

Jeg er i mellemtiden gået over til at bruge LINQ to SQL, så det er ikke længere aktuelt.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester