AspNetBoilerplate Возвращает все записи, содержащие предложение where

У меня проблема с запросом LINQ с использованием aspnetboilerplate. несмотря на предложение where, он возвращает все записи.

Я хочу выбрать все записи с EnrolResponse.IsComplete = true.

у меня есть три объекта

public class User : Entity<int>, IFullAudited
{
    public string Email { get; set; }

    public List<EnrollAttemptRequest> EnrollAttempts { get; set; }

}

public class EnrollAttemptRequest : Entity<int>
{
    public int UserId { get; set; }

    public EnrollAttemptResponse EnrolResponse { get; set; }

}

public class EnrollAttemptResponse : Entity<int>, IFullAudited
{
    public int EnrollAttemptRequestId { get; set; }

    public bool IsComplete { get; set; }

}

следующий запрос возвращает все записи, даже если IsComplete равно false.

        var enroledUsers = await _userRepository.GetAll()
            .Where(x => x.EnrollAttempts.Any(y=>y.EnrolResponse.IsComplete == true))
            .Include(x=>x.EnrollAttempts)
            .ThenInclude(x=>x.EnrolResponse)
            .ToListAsync();

Если разбить запрос на IQueryable, но я получаю тот же результат


person PowerMan2015    schedule 19.11.2019    source источник


Ответы (1)


Может, вам нужен All () вместо Any ()?

Если вы используете Any (), вы получите все записи, если хотя бы 1 удовлетворяет условию. Если вы используете All (), вы получите все записи, если все они удовлетворяют условию

var enroledUsers = await _userRepository.GetAll()
            .Where(x => x.EnrollAttempts.All(y=>y.EnrolResponse.IsComplete == true))
            .Include(x=>x.EnrollAttempts)
            .ThenInclude(x=>x.EnrolResponse)
            .ToListAsync();
person Alexandr S    schedule 19.11.2019