我首先使用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表并获取公司?
我正在使用下面的多对多示例架构
我可以在一个查询中完成所有操作吗?也许使用延迟加载方法?
非常感谢您能指出类似的示例或示例代码
答案 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))