- Home
- Categorie
- Coding e Sistemistica
- Altri linguaggi per il web
- Semplificare codice if
-
Semplificare codice if
Ciao, io nel mio codice di un'applicazione ASP.NET devo inserire diversi "if", un centinaio. Ci sarebbero delle soluzioni per semplificare il codice in caso di una gran quantità di "if" senza perdere prestazioni?
Grazie
-
if(a==0) { ... } else { ... } ``` può essere sostituito da
switch(a)
{
case 0:
...
break
case 1:
...
break
}Forse però, se puoi spiegare oppure postare il codice possiamo aiutarti a ragionare su di un approccio differente all'if
-
Io ad esempio ho questo codice con due If "principali" cioè quelli che vorrei semplificare cbsc1 e cbsc2:
if (cbsc1 ?? false) { if (raceInfo.Hdr.Contains("Huntingdon")) { horses = (from a in horses where a.Race.Course == "Wor" || a.Race.Course == "Ling" // where a.Race.RaceDate.Date == DateTime.Now.Date select a).ToList(); } } if (cbsc2 ?? false) { if (raceInfo.Hdr.Contains("Newcastle")) { horses = (from a in horses where a.Race.Course == "Ayr" || a.Race.Course == "Nkt" // where a.Race.RaceDate.Date == DateTime.Now.Date select a).ToList(); } }
Io ne dovrei fare un centinaio di if cbsc1 e cbsc2, dove cambiano solo i valori di raceInfo.Hdr.Contains e where a.Race.Course ==. Non ci sono soluzioni che mantengano le prestazioni, esempio un array o qualcosa del genere?
-
Se mi spieghi qual'è la logica è possibile che si risolva tutto nel Database...
Dentro gli iif principali cerchi di recuperare tutti i cavalli che hanno corso alcune determinate gare in funzione di ciò che è contenuto in Hdr...
Quindi abbiamo una tabella delle gare legate ai Cavalli.
Puoi mettere in un ulteriore tabella gli Hdr e legarli alle gare?Poi se mi spieghi cosa sono i cbsc magari diamo un posto anche a loro
-
Io ho un centinaio di corse "raceInfo.Hdr.Contains". Per ogni corsa ho cbsc1 e cbsc2 che sono dei filtri (checkbox nella mia tabella).
Per ogni corsa filtro delle altre corse "where a.Race.Course == "corsa1"" "where a.Race.Course == "corsa2"" eccEsempio
Nome corsa
Huntingdon cbsc1 Wor Ling
Huntingdon cbsc2 Ayr Nkt
Newcastle cbsc1 Nkt Ling
Newcastle cbsc2 Wor Ayr
e così avanti..Quindi, quando ho la corsa Huntingdon e seleziono il filtro cbsc1 visualizzo solo le righe contententi "Wor" "Ling" e avanti così..
Ciò che vorrei sarebbe una semplificazione del codice, ma SENZA perdene in prestazioni (velocità) nel filtrare le corse.
Gli IF sono l'unica soluzione? Sono quelli che come prestazioni sono più veloci? O ci sono altri modi?
-
Lo schema
Huntingdon | 1 | 'Wor' or 'Ling'
Huntingdon | 2 | 'Ayr' or 'Nkt'
Newcastle | 1 | 'Nkt' or 'Ling'
Newcastle | 2 | 'Wor' or 'Ayr'è predefinito?
Se sì immagina il seguente scenario:
Costruisci una tabella [RelationShipCourse] con lo schema qui sopra dove avrai le colonneAltraCorsaID(int)|cbsc(byte)|CorsaID(int)
Un'altra tabella [AltraCorsa] conterrà le Corse della prima colonna: AltraCorsaID(int)|AltraCorsa(varchar(50)). Quindi sulla pagina avrai una DropDownList [DdlAltraCorsa] con tutte le altre corse di questa tabella che hanno un riferimento nella tabella precedente e le due CheckBox precedenti, cbsc1 e cbsc2.
La query sarà più o meno così:
var cbsc = 0; if (cbsc1 ?? false) cbsc = 1; if (cbsc2 ?? false) cbsc = 2; horses = (from r in Race where r.RelationShipCourse.AltraCorsaID == DdlAltraCorsa.SelectedValue && r.RelationShipCourse.cbsc == cbsc select r.horses).ToList();
Probabilmente se la scrivi as is anche costruendo le tabelle non funzionerà, ma secondo me è la strada più corretta, fai fare il lavoro di relazione a SQL, altrimenti perché si chiamerebbe Relational Database?