c# - 使用 Linq 查询多个字段的集合
问题描述
我有一个IEnumerable<Videos>
对象,我想在 IEnumerable 的多个字段中搜索单个搜索词,包括相关数据(标签)。
Video、VideoTags 和 Tag 对象如下所示
public class Video
{
public Guid Id {get; set;}
public string Name {get; set;}
public string Description {get; set; }
public ICollection<VideoTags> VideoTags {get; set;}
}
public class VideoTags
{
public Guid VideoId {get; set; }
public Video Video {get; set; }
public Guid TagId{get; set;}
public Tag Tag {get; set; }
}
public class Tag
{
public Guid Id {get; set; }
public string TagName {get; set;}
}
如果其中任何一个包含 searchTerm,我如何有效地搜索字段名称、描述和标记名称中的单个搜索词,然后返回一个List<Tuple<string, string, string>>
.
下面的代码不起作用
videos = videos.Where(v => v.Name.Contains(searchTerm) ||
v.Description.Contains(searchTerm) ||
v.VideoTags.Where(t => t.Tag.TagName.Contains(searchTerm))
我怎样才能做到这一点?
解决方案
添加一个Select
子句以返回Tuple
. 还Any
用于验证视频标签是否包含 TagName 的搜索词。
videos = videos.Where(v => v.Name.Contains(searchTerm) ||
v.Description.Contains(searchTerm) ||
v.VideoTags.Any(t => t.Tag.TagName.Contains(searchTerm)))
.Select(v => new Tuple<string, string, string>(v.Name, v.Description, v.VideoTags.FirstOrDefault(t => t.Tag.TagName.Contains(searchTerm))));
这VideoTags
不是一个集合,因此您可以TagName
通过直接访问该属性来检查搜索词。
推荐阅读
- xcode - 如何在 iOS XCode 11.4 的模拟器中测试 FCM 推送通知?
- javascript - 将元素设置在另一个元素之下并删除当前放置元素
- prestashop - 如何快速找出 PrestaShop 网站是 1.6 版还是 1.7.x 版?
- javascript - JS 找不到 HTML 选择
- django - 模型中字段中每个项目的选择
- kotlin - 当 setOnTouchListener 在 kotlin 中工作时 setOnClickListener 不工作
- c++ - 使用返回对象的函数处理错误
- java - 为什么从 int 到 char 的隐式类型转换没有给我错误?
- tableau-api - 如何使用 Tableau 中的计算字段复制运行总表计算?
- c - 使用 realloc 函数时出现内存损坏