Search code examples
c#asp.net-mvclinq

Chaining where clauses returns 0 objects


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?


Solution

  • 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();
    }