For a schoolproject i have to make a simple website where i have to search members based on what the user types and then display these members. I have 5 properties to look for (first and lastname, sex, level, club). They have to work together but some might be null.
public List<Lid> ZoekLeden(string deelVoornaam, string deelNaam, string geslacht, string niveau, string deelClubNaam)
{
var filteredleden = context.Leden.Include(lid => lid.ClubNrNavigation)
.OrderBy(l => l.Naam)
.Where(l => l.Voornaam.Contains(deelVoornaam))
.Where(l => l.Naam.Contains(deelNaam))
.Where(l => l.Geslacht.Equals(geslacht))
.Where(l => l.Niveau.Equals(niveau))
.Where(l => l.ClubNrNavigation.Naam.Contains(deelClubNaam))
.ToList();
return filteredleden;
}
Sadly it keep returning 0 and i dont know why.
I tested each individual property and they all return the proper members. But the moment i use multiple they always return 0. Does anyone know why this happends and how i can fix it?
CodePudding user response:
Try this
public List<Lid> ZoekLeden(string deelVoornaam, string deelNaam, string geslacht, string niveau, string deelClubNaam)
{
IQueryable<Lid> filteredleden = context.Leden
.Include(lid => lid.ClubNrNavigation);
if (!string.IsNullOrEmpty(deelVoornaam))
filteredleden = filteredleden.Where(l => l.Voornaam.Contains(deelVoornaam));
if (!string.IsNullOrEmpty(deelNaam))
filteredleden = filteredleden.Where(l => l.Naam.Contains(deelNaam))
if (!string.IsNullOrEmpty(geslacht))
filteredleden = filteredleden.Where(l => l.Geslacht.Equals(geslacht))
if (!string.IsNullOrEmpty(niveau))
filteredleden = filteredleden.Where(l => l.Niveau.Equals(niveau))
if (!string.IsNullOrEmpty(deelClubNaam))
filteredleden = filteredleden.Where(l => l.ClubNrNavigation.Naam.Contains(deelClubNaam));
return filteredleden.OrderBy(l => l.Naam).ToList();
}
CodePudding user response:
You're chaining .Where() which is the equivalent of if(bool && bool && bool). Instead, I think you need if(bool || bool || bool)
So the LINQ statement should be:
var filteredleden = context.Leden.Include(lid => lid.ClubNrNavigation)
.OrderBy(l => l.Naam)
.Where(l => l.Voornaam.Contains(deelVoornaam)
|| l.Naam.Contains(deelNaam)
|| l => l.Geslacht.Equals(geslacht)
|| l => l.Niveau.Equals(niveau)
|| l => l.ClubNrNavigation.Naam.Contains(deelClubNaam)
)
.ToList();
If you really do need the &&'s, then theres probably nothing in your dataset that meets all the criteria in the chained .Where()s