C # Запрос, когда любое из условий не является нулевым - PullRequest
0 голосов
/ 14 сентября 2018

Я хочу найти данные в базе данных при выполнении любого из условий.

Вставил мой код, чтобы он был более понятным

    [HttpGet]
    [Route("")]
    public IEnumerable<User> GetUsers(string FirstName = null, string LastName = null, int Year = 0, int Month = 0)
    {

        var users = _context.Users.AsQueryable();
        if (FirstName != null || LastName != null || Year != 0 || Month != 0)
        {
            users = _context.Users.Where(u => (u.CreatedAt.Year == Year) && (u.CreatedAt.Month == Month));
        }
        else
        {
            users = _context.Users;
        }

        return users.ToList();

    }

Этот код выполняет простой поиск в базе данных

where year == createdAt.year &&
              month == createdAt.month && 
              LastName == abc && 
              FirstName == abc

Однако, если одно из условий равно 0 / пусто, база данных ничего не возвратит, поскольку нет месяца / года == 0 или имени / фамилии == пусто; Что мне нужно, так это если год / месяц / фамилия / имя 0 / ноль, а затем просто проигнорировать его и проверить другое условие.

Есть идеи?

Ответы [ 3 ]

0 голосов
/ 14 сентября 2018
// first style
users = _context.Users.Where(u => 
    (Year != 0 ? u.CreatedAt.Year == Year : true) &&
    (Month != 0 ? u.CreatedAt.Month == Month : true) &&
    (FirstName != null ? u.FirstName == FirstName : true) &&
    (LastName != null ? u.LastName == LastName : true));
// second style
users = _context.Users.Where(u => 
    (Year == 0 || u.CreatedAt.Year == Year) &&
    (Month == 0 || u.CreatedAt.Month == Month) &&
    (FirstName == null || u.FirstName == FirstName) &&
    (LastName == null || u.LastName == LastName));

Я думаю, вы должны проверить каждое условие отдельно, как это. Например, когда Year! = 0 и каждый другой параметр не задан, ваш исходный код ничего не даст.

0 голосов
/ 14 сентября 2018

Попробуйте это users = _context.Users.Where(x => && (x.FirstName != null || x.FirstName == FirstName) && (x.Year == 0 || x.Year == Year) && (x.Month == 0 || x.Month == Month) .ToList();

0 голосов
/ 14 сентября 2018

Вы можете добавить свою логику в запрос LINQ для проверки условий.

users = _context.Users.Where(x => x.Id !=0 
                               && x.FirstName != null 
                               && x.FirstName != null 
                               && x.Year != 0 
                               && x.Month != 0)
                              .ToList(); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...