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

Linq 包含用于在多个表中进行比较的方法,linq,entity-framework,ef-code-first,Linq,Entity Framework,Ef Code First,我先用EF代码。两张桌子 公司表(字段:CompanyName)和标记表(标记名)。公司表有一个到标记表的链接 public class Company { public int Id { get; set; } public string CompanyName { get; set; } public virtual ICollection<Tags> Tags { get; set; } } 我的数据库包含: 公司名

我先用EF代码。两张桌子

公司表(字段:CompanyName)和标记表(标记名)。公司表有一个到标记表的链接

    public class Company   
    {
     public int Id { get; set; }
     public string CompanyName { get; set; }
     public virtual ICollection<Tags> Tags { get; set; }
    }
我的数据库包含:

公司名称:test1

公司名称:公司测试

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

如果我有标记名“test”

公司名称:ABC公司标记名:标记名:测试

我如何查看标签表并获得公司

我正在使用下面的多对多示例模式

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


如果您能给我指出一个类似的示例或示例代码,我将不胜感激。

包含的代码区分大小写,因此如果您的数据是大写的,而搜索词是小写的,则它们将不匹配。如果要在搜索时忽略大小写,请使用
result.Where(s=>s.CompanyName.ToLower().Contains(searchString.ToLower())
。要搜索标记表以及公司表,请将它们连接起来

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))

第二家公司是“测试”还是“测试”?都是小写的“测试”@artm你是对的,我重新检查了它不是小写的。啊。您知道如何检查标记表中的记录吗?标记表还是标记列?从您的示例来看,标记似乎是同一个表中的另一列,然后执行
result.Where(s=>s.CompanyName.Contains(searchString)| | s.TagName.Contains(searchString))
@artm它是一个标记表。公司表有一个标签表的链接我已经更新了我的问题,请看,我不认为我必须提到它是多对多的,所以我不能直接加入。我是否需要创建两个单独的查询?或者我可以在一个地方做所有的事情?使用延迟加载?谢谢你的帮助谢谢Artm的作品!你能给我解释一下c.Tags.Any(t=>t.TagName.Contains(search)的工作原理吗?为什么你要包含Any()为什么它不能只处理Contains()方法?查看任何定义,Any将检查c中的所有标记的包含条件,如果任何标记包含搜索关键字,则返回true。关于区分大小写:查询在数据库中运行,因此取决于数据库排序规则查询是否区分大小写。通常,数据库列不区分大小写.
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))