包含在多个表中进行比较的方法

时间:2014-10-13 05:15:10

标签: linq entity-framework ef-code-first

我首先使用EF代码。两张桌子。

公司表(字段:CompanyName)和标记表(TagName)。公司表有一个指向标签表的链接

    public class Company   
    {
     public int Id { get; set; }
     public string CompanyName { get; set; }
     public virtual ICollection<Tags> Tags { get; set; }
    }

我想检索CompanyName包含已传递字符串的所有公司,并检索所有将该字符串作为标记的公司

        var result = from c in _db.Company
                     select new CompaniesVM  
                     {
                         Id = c.Id,
                         CompanyName = c.CompanyName
                     };

        if (!String.IsNullOrEmpty(searchString))
        {
            result = result.Where(s => s.CompanyName.Contains(searchString));
        }

我的数据库包含:

公司名称:test1

公司名称:公司测试

如果我使用searchString“test”运行代码,它只捕获第一条记录。 Contains方法不捕获第二条记录。这是为什么?如何使用“test”字符串捕获所有记录?

此外,如果我有TagName“test”

公司名称:ABC Inc.标签:TagName:test

我如何查看Tags表并获取公司?

我正在使用下面的多对多示例架构

enter image description here

我可以在一个查询中完成所有操作吗?也许使用延迟加载方法?

非常感谢您能指出类似的示例或示例代码

1 个答案:

答案 0 :(得分:2)

包含区分大小写,因此如果您的数据为大写且searchTerm为小写,则它们将不匹配。如果您想在搜索时忽略大小写使用result.Where(s => s.CompanyName.ToLower().Contains(searchString.ToLower()))。要搜索Tag表以及Company表加入

from c in _db.Company
join t in _db.Tag on c.field equals t.field
select new { Companyname = c.CompanyName, TagName = t.TagName}
where !String.IsNullOrEmpty(search) && (c.CompanyName.Contains(search) || t.TagName.COntains(search)

许多人更新,因为您拥有公司的收藏品:

from c in _db.Company
select new {
     CompanyName = c.CompanyName
}
where !string.IsNullOrEmpty(search) 
      && (c.CompanyName.Contains(search) || c.Tags.Any(t => t.TagName.Contains(search))