patterncsharpModerate
Search query utilizing menus and checkboxes
Viewed 0 times
menussearchutilizingcheckboxesqueryand
Problem
I'm dealing with a searching query where the user will pick from menus and checkboxes the variables-criteria I'm passing to the
```
public List toWeb(string name, string egk, string
typosSumvan, Boolean olaTaSumvanta)
{
List listaSumvantwn = new List();
if (olaTaSumvanta == false)
{
if (egk != "")
{
if (typosSumvan != "")
{
using (var db = new CMMSEntity())
{
foreach (var a in db.sumvanta)
{
if (a.apodektis == name && a.egkatastasi == egk && a.eidosSumvan == typosSumvan)
{
listaSumvantwn.Add(readFromTable(a));
}
}
}
}
else
{
using (var db = new CMMSEntity())
{
foreach (var a in db.sumvanta)
{
if (a.apodektis == name && a.egkatastasi == egk)
{
listaSumvantwn.Add(readFromTable(a));
}
}
}
}
}
else
{
if (typosSumvan != "")
{
using (var db = new CMMSEntity())
{
foreach (var a in db.sumvanta)
{
if (a.apodektis == name && a.eidosSumvan == typosSumvan)
{
listaSumvantwn.Add(readFromTable(a));
}
}
}
}
else
{
using (var db = new CMMSEntity())
{
foreach (var a in db.sumvanta)
toWeb method and a list will be returned. This works fine but I'm going to add two more variables and it's already hard to follow.```
public List toWeb(string name, string egk, string
typosSumvan, Boolean olaTaSumvanta)
{
List listaSumvantwn = new List();
if (olaTaSumvanta == false)
{
if (egk != "")
{
if (typosSumvan != "")
{
using (var db = new CMMSEntity())
{
foreach (var a in db.sumvanta)
{
if (a.apodektis == name && a.egkatastasi == egk && a.eidosSumvan == typosSumvan)
{
listaSumvantwn.Add(readFromTable(a));
}
}
}
}
else
{
using (var db = new CMMSEntity())
{
foreach (var a in db.sumvanta)
{
if (a.apodektis == name && a.egkatastasi == egk)
{
listaSumvantwn.Add(readFromTable(a));
}
}
}
}
}
else
{
if (typosSumvan != "")
{
using (var db = new CMMSEntity())
{
foreach (var a in db.sumvanta)
{
if (a.apodektis == name && a.eidosSumvan == typosSumvan)
{
listaSumvantwn.Add(readFromTable(a));
}
}
}
}
else
{
using (var db = new CMMSEntity())
{
foreach (var a in db.sumvanta)
Solution
Each of your parameters is either adding a filter, or an ignored value.
We can construct a list of Predicates, each one corresponding to a single parameter.
Using an extension method taken from this answer, we then apply all the filters.
We can construct a list of Predicates, each one corresponding to a single parameter.
public List toWeb(string name, string egk, string
typosSumvan, Boolean olaTaSumvanta)
{
var predicates = new List>();
if (!olaTaSumvanta) { predicates.Add(row => row.apodektis == name) }
if (egk != "") { predicates.Add(row => row.egkatastasi == egk) }
if (typosSumvan != "") { predicates.Add(row => row.eidosSumvan == typosSumvan) }
using (var db = new CMMSEntity())
{
foreach (var a in db.sumvanta)
{
if (a.IsValidEntity(predicates))
{
listaSumvantwn.Add(readFromTable(a));
}
}
}
}Using an extension method taken from this answer, we then apply all the filters.
public static Boolean IsValidEntity(this T entity, IEnumerable> predicates)
{
return predicates.All(p => p(entity));
}Code Snippets
public List<newEvent> toWeb(string name, string egk, string
typosSumvan, Boolean olaTaSumvanta)
{
var predicates = new List<Predicate<DataRow>>();
if (!olaTaSumvanta) { predicates.Add(row => row.apodektis == name) }
if (egk != "") { predicates.Add(row => row.egkatastasi == egk) }
if (typosSumvan != "") { predicates.Add(row => row.eidosSumvan == typosSumvan) }
using (var db = new CMMSEntity())
{
foreach (var a in db.sumvanta)
{
if (a.IsValidEntity(predicates))
{
listaSumvantwn.Add(readFromTable(a));
}
}
}
}public static Boolean IsValidEntity<T>(this T entity, IEnumerable<Predicate<T>> predicates)
{
return predicates.All(p => p(entity));
}Context
StackExchange Code Review Q#102502, answer score: 16
Revisions (0)
No revisions yet.