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
相关产品推荐
相关产品推荐

