【问题标题】:C# Linq search inside object linked propertyC# Linq 在对象链接属性中搜索
【发布时间】:2015-11-02 18:39:33
【问题描述】:

我正在尝试在我的对象集的某些属性中进行一些搜索,但是在挂载我的 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.titleVT_Video.descriptionVT_Video.VT_VideoTag.VT_Tag.name 在我的Video collection 中搜索user given word,到目前为止我所做的只是搜索title 和@ 987654328@:

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# asp.net-mvc linq linq-to-sql


    【解决方案1】:

    我使用 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))
    

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

    【讨论】:

    • 它在一方面工作,它带来了一个带有名为sandman标签的视频,但它没有带来标题为sandman的视频
    • @Terkhos String.Contains 区分大小写,因此如果您的标题以大写字母开头,而您的标签名称不是,那么这是有道理的。
    • @Terkhos 不客气!我很高兴能帮上忙。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-05
    • 2015-05-16
    • 2012-12-24
    • 2021-05-26
    • 2020-11-07
    相关资源
    最近更新 更多