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

本文关键字:链接 属性 内部对象 搜索 Linq | 更新日期: 2023-09-27 18:07:22

我正试图在我的对象集的一些属性内进行一些搜索,但我在正确的方式上遇到了一些麻烦来安装我的linq查询,我有我的VT_Video类,它有它的属性和一些链接对象

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.title, VT_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来做到这一点,并保持我的代码干净。

谢谢。

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

我没有使用LINQ到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))

如果集合中的任何标记的名称包含您的搜索字符串,则返回true。