我设法开发了我的第一个具有CRUD功能的MVC 5 Web应用程序。LINQ包含奇怪的行为
我的数据有很少的方式来搜索记录,但其中一个似乎没有做我所期望的。这里是我的控制器搜索查询代码:
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”时带来预期结果,但只有搜索的第一个查询部分(Before OR运算符)会找到如果我使用“NR32 4T”进行部分搜索,是否也有同样的记录?
我检查了数据库中的其他字段的查询,他们有同样的问题。
TDLR; LINQ“.Contains()”在模型中的集合上使用它时不搜索字符串的各个部分。有谁能解释这种行为吗?
LINQ是一个接口。你在使用实体框架吗?这是实现LINQ接口的原因。 –
您正将'Enumerable.Contains'与'string.Contains'混合使用。第二个标准应该是'c.Practice1.Any(e => e.PostCode。包含(搜索字符串))'。 –