Как я могу заставить EF Core возвращать объект, в котором Id не равен ни одному из значений в массиве int?
Я показываю кучу изображений, и мне нужно выбрать изображение из базы данных, которое в данный момент не отображается.
Код, который я получил (немного):
public async Task<IPicture> GetUniquePicture(int[] existingIds)
{
IPicture result = null;
_context.Pictures.Where();
}





Вы можете сделать это с помощью Contains
_context.Pictures.Where(r => !existingIds.Contains(r.ID));
РЕДАКТИРОВАТЬ
Как Михал упомянул в комментарии, если вам нужно вернуть один объект, используйте FirstOrDefault с Contains
Обратите внимание, что метод должен возвращать одну сущность вместо коллекции.
Я бы использовал метод FirstOrDefault, который принимает предикат для указания фильтрации. Предикат использует метод массива Contains:
_context.Pictures.FirstOrDefault(picture => ! existingIds.Contains(picture.ID));
Обратите внимание, что FirstOrDefault вернет null, если педикат отфильтрует все элементы.
Вы можете выполнить эту проверку с помощью All.
_context.Pictures.Where(picture => existingIds.All(id=> id != picture.ID));
и если вы просто хотите вернуть элемент, а не коллекцию:
_context.Pictures.FirstOrDefault(picture => existingIds.All(id=> id != picture.ID));
Вот что у меня получилось: (Random - это настраиваемый метод расширения)
public async Task<IPicture> GetUniquePicture(int[] existingIds)
{
var tmp = await _context.Pictures.Where(p => !existingIds.Contains(p.Id)).ToListAsync();
return tmp.Random().First();
}
Благодарность!
проверьте его на нуль :)