C# Linq 搜索内部对象链接 属性

C# Linq search inside object linked property

我正在尝试在我的对象集的某些属性中进行一些搜索,但我在安装 linq 查询的正确方法上遇到了一些麻烦,我有 VT_Video class它有它的属性和一些链接对象

public partial class VT_Video
{
    public int ID { get; set; }
    public string title { get; set; }
    public string description { get; set; }

    public virtual ICollection<VT_VideoTag> VT_VideoTag { get; set; }
}

public partial class VT_VideoTag
{
    public int ID { get; set; }
    public int tagID { get; set; }
    public int videoID { get; set; }

    public virtual VT_Tag VT_Tag { get; set; }
    public virtual VT_Video VT_Video { get; set; }
}

public partial class VT_Tag
{
    public int ID { get; set; }
    public string name { get; set; }

    public virtual ICollection<VT_VideoTag> VT_VideoTag { get; set; }
}

我想要完成的是通过 VT_Video.titleVT_Video.descriptionVT_Video.VT_VideoTag.VT_Tag.name 在我的 Video collection 中搜索 user given word,我设法做到了到目前为止只搜索 titledescription:

var myVideos = db.VT_Video.Include("VT_VideoTag")
                          .Include("VT_VideoTag.VT_Tag")
                          .Where(vid =>
                                 vid.descricao.Contains(strBusca) ||
                                 vid.titulo.Contains(strBusca)).ToList();

现在,我知道我可以用一些 foreach 和额外的代码做我想做的事,但我想知道是否可以使用 linq 来做它并保持我的代码干净。

谢谢。

我没有使用 LINQ to SQL,但似乎 .Any() 可以满足您的要求:

var myVideos = db.VT_Video.Include("VT_VideoTag")
                          .Include("VT_VideoTag.VT_Tag")
                          .Where(vid =>
                                 vid.descricao.Contains(strBusca) ||
                                 vid.titulo.Contains(strBusca) ||
                                 vid.VT_VideoTag.Any(tag => tag.name.Contains(strBusca))).ToList();

注意我添加了这个子句:

vid.VT_VideoTag.Any(tag => tag.name.Contains(strBusca))

如果集合中的任何标签的名称包含您的搜索字符串,则 returns 为真。