C# 使用Linq查询多个字段的集合
我有一个IEnumerable对象,我想在IEnumerable的多个字段中搜索单个搜索项,包括相关的数据标记 视频、视频标签和标签对象如下所示C# 使用Linq查询多个字段的集合,c#,linq,asp.net-core,C#,Linq,Asp.net Core,我有一个IEnumerable对象,我想在IEnumerable的多个字段中搜索单个搜索项,包括相关的数据标记 视频、视频标签和标签对象如下所示 public class Video { public Guid Id {get; set;} public string Name {get; set;} public string Description {get; set; } public ICollection<VideoTags> VideoTags {
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;}
}
如何实现这一点?添加Select子句以返回元组。另外,Any用于验证视频标记是否包含标记名的搜索词
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不是集合,因此您可以通过直接访问属性来检查标记名中的搜索项。是否有任何错误?运算符| |不能应用于bool类型的操作数,IEnumerabley您应该包括VideoTags。我已经包括在内。不包括?在选择它时会引发异常。不过,对于您的响应,VideoTags是一个ICollection。我已经用它更新了我的帖子。@CMorgan-我已经更新了答案,将视频标签作为收藏。Any用于检查条件,FirstOrDefault用于获取第一个值。
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))));