.net - LINQ查询帮助: searching for data in a Many to Many using Entity Framework

标签 .net asp.net-mvc-3 linq entity-framework lambda

我查了一下并看到了很多类似的问题,但我仍然无法弄清楚。我有两个类 Assets 和标签。以下是它们的定义:

public class Asset
{
    [Key]
    public int AssetID { get; set; }

    public decimal? Height { get; set; }
    public decimal? Width { get; set; }
    public decimal? Depth { get; set; }
    public decimal? Radius { get; set; }
    public string Name { get; set; }

    [Display(Name = "Manufacturer")]
    public int ManufacturerID { get; set; }

    [Display(Name = "Type")]
    public int PackageTypeID { get; set; }

    public virtual Manufacturer Manufacturer { get; set; }
    public virtual PackageType PackageType { get; set; }
    public virtual ICollection<Tag> Tags { get; set; }

}

public class Tag
{
    public int TagID { get; set; }
    public string Key { get; set; }
    public string Value { get; set; }
    public virtual ICollection<Asset> Assets { get; set; }

}

我的 Assets 索引页面上有一个搜索框,我希望能够搜索 Asset.Name、Manufacturer.Name、Asset.Tag.Key 和 Asset.Tag.Value。这是我到目前为止所得到的。

var assets = from a in db.Assets                        
                     select a;
if (!String.IsNullOrEmpty(searchString))
        {
assets = assets.Where(a => a.Name.ToUpper().Contains(searchString.ToUpper())
          || a.Manufacturer.Name.ToUpper().Contains(searchString.ToUpper()));
}

现在,我不知道如何访问/搜索 Tag.Key 或 Tag.Value。我已经尝试过使用 LINQ 查询进行各种连接,但我不够聪明。

如有任何帮助,我们将不胜感激。

最佳答案

您可以使用 Any 来检查标签并按搜索字符串进行过滤

var result = db.Assets.Where(a => a.Name.ToUpper().Contains(searchString.ToUpper()) ||
                                  a.Manufacturer.Name.ToUpper().Contains(searchString.ToUpper()) ||                       
                                  a.Tags.Any(t => t.Key.ToUpper().Contains(searchString.ToUpper()) || t.Value.ToUpper().Contains(searchString.ToUpper()));

关于.net - LINQ查询帮助: searching for data in a Many to Many using Entity Framework,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14342952/

相关文章:

c# - Parallel.For步长

jquery - 添加 MVC3 不显眼的验证 (addMinMax)

asp.net-mvc-3 - MVC 3 : AutoMapper and Project/Solution Structure

c# - 通过 Ajax 将复杂对象发布到 MVC

C# - 使用属性名称作为字符串按属性排序的代码

.net - 数据读取器仍然比数据集更快吗?

.net - 如何检测是否同时按下了左右按钮?

c# - 展平字符串字典

c# - 以编程方式分离 SQL Server 数据库以复制 mdf 文件

c# - Scala collection 的seq/par/view/force 是否可以被视为违反统一返回类型原则?