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

Entity Framework中如何用.Contains实现多Tag全匹配查询?

实现多标签全匹配的视频查询

要修改原方法以支持查询包含所有传入标签的视频(即每个传入Tag都必须存在于视频的Tags集合中),可以通过LINQ的All方法简化逻辑,遍历所有传入标签并逐一验证存在性。

修改后的代码如下:

public async Task<List<CreateVideoWithTagNamesDTO>> FindVideosByTags(Tag[] tags)
{
    // 处理空参数,避免空引用异常
    if (tags == null || tags.Length == 0)
    {
        return new List<CreateVideoWithTagNamesDTO>();
    }

    var result = await _db
        .Where(p => tags.All(tag => p.Tags.Contains(tag)))
        .Select(item => new CreateVideoWithTagNamesDTO
        {
            Description = item.Description,
            Title = item.Title,
            Url = item.Url,
            Tags = _mapper.Map<IList<CreateTagDTO>>(item.Tags)
        })
        .ToListAsync();

    return result;
}

关键逻辑说明

  • tags.All(tag => p.Tags.Contains(tag)):该表达式会验证视频的Tags集合包含传入数组中的每一个Tag,只有满足所有标签存在条件的视频才会被筛选出来。
  • 空参数处理:提前判断传入的tags数组是否为空或无元素,避免后续LINQ查询抛出异常,同时返回空列表作为合理的默认结果。

内容的提问来源于stack exchange,提问作者Ettur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 01:45:31