我設法開發了我的第一個具有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。包含(搜索字符串))'。 –