我已经设法开发了我的第一个具有CRUD功能的MVC 5 Web应用程序.
我的数据搜索记录的方法很少,但其中一个似乎没有按照我的预期进行.这是我的控制器搜索查询代码:
query = query.Where(c =>
c.PostCode.Contains(searchString)
|| c.Place1.Select(e => e.PostCode).Contains(searchString)
Run Code Online (Sandbox Code Playgroud)
这是我的模特:
public Place()
{
Place1 = new HashSet<Place>();
}
[Display(Name = "Postcode")]
public string PostCode { get; set; }
public virtual ICollection<Place> Place1 { get; set; }
Run Code Online (Sandbox Code Playgroud)
我的数据库关系是一个自引用表 - > 1到0,因此字段名称相同.
任何人都可以解释为什么搜索功能会在搜索代码的两个部分的全部值"NR32 4TW"时带来预期结果,但只有搜索的第一个查询部分(在OR运算符之外)才会找到相同的记录使用"NR32 4T"进行部分搜索?
我已经检查了数据库中其他字段的查询,他们有同样的问题.
TDLR; LINQ".Contains()"在模型中的Collection上使用它时不会搜索字符串的各个部分.有谁能解释这种行为?