You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Int数组传入LINQ操作符获取匹配ID的对象(非循环实现)

嗨,这问题我太熟了!想用LINQ结合数组来匹配ID获取对象,其实用Where加Contains就能轻松搞定,完全不用写for循环,而且效率还更高。

首先,你原来的Select()是不对的,我们需要用Where来做筛选逻辑。直接看修改后的代码吧:

public IEnumerable<ExhibitionPhoto> GetPhotosById(int[] ids)
{
    // 先做个空值判断,避免空数组或null导致的问题
    if (ids == null || ids.Length == 0)
    {
        return Enumerable.Empty<ExhibitionPhoto>();
    }
    
    // 核心逻辑:筛选ExhibitionPhotoId在ids数组里的记录
    return _db.ExhibitionPhotos.Where(photo => ids.Contains(photo.ExhibitionPhotoId));
}

为什么这么写?

  • Where是LINQ里的筛选操作符,用来挑出符合条件的元素
  • ids.Contains(photo.ExhibitionPhotoId)会检查当前照片的ID是否存在于你传入的数组中
  • 更重要的是,EF会把这个LINQ查询转换成SQL的WHERE ExhibitionPhotoId IN (...)语句,一次数据库查询就能搞定所有匹配项,比循环多次查数据库高效太多了

额外小提示

如果你想立即执行数据库查询(而不是延迟到枚举结果时才执行),可以在末尾加上ToList():

return _db.ExhibitionPhotos.Where(photo => ids.Contains(photo.ExhibitionPhotoId)).ToList();

这种方式会直接把结果加载到内存里,适合需要立即拿到数据的场景。

别忘了处理ids为空的情况哦,不然如果传入null或者空数组,要么会抛出空引用异常,要么会返回整个表的数据,这都不是我们想要的结果。

内容的提问来源于stack exchange,提问作者N'aix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 09:53:15