【发布时间】:2017-02-02 16:16:00
【问题描述】:
我已经成功开发出我的第一个具有 CRUD 功能的 MVC 5 Web 应用程序。
我的数据几乎没有搜索记录的方法,但其中一种方法似乎没有达到我的预期。这是我的控制器搜索查询代码:
query = query.Where(c =>
c.PostCode.Contains(searchString)
|| c.Place1.Select(e => e.PostCode).Contains(searchString)
这是我的模型:
public Place()
{
Place1 = new HashSet<Place>();
}
[Display(Name = "Postcode")]
public string PostCode { get; set; }
public virtual ICollection<Place> Place1 { get; set; }
我的数据库关系是一个自引用表 -> 1 到 0,因此字段名称相同。
谁能解释一下为什么搜索功能在搜索代码的两个部分的完整值“NR32 4TW”时会带来预期的结果,但只有搜索的第一个查询部分(在 OR 运算符之前)会找到相同的结果记录我是否会使用“NR32 4T”进行部分搜索?
我已经对照数据库中的其他字段检查了查询,它们也有同样的问题。
TDLR; LINQ“.Contains()”在模型内的 Collection 上使用时不会搜索字符串的部分。谁能解释这种行为?
【问题讨论】:
-
LINQ 是一个接口。你在使用实体框架吗?这就是实现 LINQ 接口的方法。
-
您将
Enumerable.Contains与string.Contains混合在一起。第二个条件应该是c.Practice1.Any(e => e.PostCode.Contains(searchString))。
标签: c# linq asp.net-mvc-5 contains