返回一个实体,其中实体ID不等于int数组中的任何值

时间:2018-12-15 08:12:37

标签: c# entity-framework entity-framework-core

如何获取EF Core返回Id不等于int数组中任何值的实体?

我显示了一堆图片,需要从数据库中选择当前未显示的图片。

到目前为止我得到的代码(不多):

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

    _context.Pictures.Where();
}

4 个答案:

答案 0 :(得分:2)

您可以使用 Contains

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

编辑

如评论中Michal所述,如果您需要退回单个实体,请使用 FirstOrDefault Contains

答案 1 :(得分:0)

我将使用FirstOrDefault方法,该方法接受谓词来指定过滤。谓词使用数组的Contains方法:

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

请注意,如果花梗滤除了所有元素,FirstOrDefault将返回null

答案 2 :(得分:0)

您可以使用All

进行此检查
_context.Pictures.Where(picture => existingIds.All(id=> id != picture.ID));

,如果您只想返回一个元素而不是一个集合:

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

答案 3 :(得分:0)

这就是我最终得到的:(随机数是一种自定义扩展方法)

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

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

谢谢!