Вернуть сущность, в которой идентификатор сущности не равен ни одному из значений в массиве int - PullRequest
0 голосов
/ 15 декабря 2018

Как я могу заставить EF Core вернуть сущность, в которой Id не равно ни одному из значений в массиве int?

Я отображаю кучу картинок, и мне нужно выбрать картинку избаза данных, которая в данный момент не отображается.

Код, который я получил (немного):

public async Task<IPicture> GetUniquePicture(int[] existingIds)
{
    IPicture result = null;

    _context.Pictures.Where();
}

Ответы [ 4 ]

0 голосов
/ 15 декабря 2018

Это то, что я закончил: (Случайный - это пользовательский метод расширения)

public async Task<IPicture> GetUniquePicture(int[] existingIds)
{
    var tmp = await _context.Pictures.Where(p => !existingIds.Contains(p.Id)).ToListAsync();

    return tmp.Random().First();
}

спасибо!

0 голосов
/ 15 декабря 2018

Я бы использовал метод FirstOrDefault, который принимает предикат для определения фильтрации.Предикат использует Contains метод массива:

_context.Pictures.FirstOrDefault(picture => ! existingIds.Contains(picture.ID));

Обратите внимание, что FirstOrDefault вернет null, если в педикате будут отфильтрованы все элементы.

0 голосов
/ 15 декабря 2018

Вы можете сделать эту проверку, используя All

_context.Pictures.Where(picture => existingIds.All(id=> id != picture.ID));

и если вы просто хотите вернуть элемент, а не коллекцию:

_context.Pictures.FirstOrDefault(picture => existingIds.All(id=> id != picture.ID));
0 голосов
/ 15 декабря 2018

Вы можете сделать это с помощью Contains

_context.Pictures.Where(r => !existingIds.Contains(r.ID));

РЕДАКТИРОВАТЬ

Как упомянул Михал в комментарии, если вам нужен одинвозвращаемая сущность использует FirstOrDefault с Contains

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...