0
我有一個搜索表單,它在搜索目錄時接受多個單詞。當用戶搜索每個單詞長度大於等於3個字符的術語時,結果將按預期返回。但是,如果一個術語包含3個字符的單詞,它將返回更多的結果,這些結果對過濾器要求無效。使用Linq查詢返回無效結果的存儲庫
在我的資源庫中,我有下面的代碼,其中value
傳入並且employees
是DbSet。
var searchTerms = value.Split(' ')
.Select(v => v.Trim().ToLower())
.ToList();
var data = this.employees
.Where(e => searchTerms.Any(s => e.fname.Contains(s)) ||
searchTerms.Any(s => e.lname.Contains(s)) ||
searchTerms.Any(s => e.dept.name.Contains(s)) ||
e.dept.dept_subs
.Where(d => searchTerms
.Any(s => d.name.Contains(s)))
.Any())
.Where(e => e.isActive == true)
.OrderBy(e => e.lname)
.ThenBy(e => e.fname)
.AsEnumerable();
所以問題仍然存在,爲什麼查詢打破兩個字符的單詞,我該如何解決它?
UPDATE
好。事實證明,它不限於2個字符。
結果格式如下。如果一個子部門是空的,它將只是名字行。
LastName, FirstName
SubDepartment, Department
搜索 '阿里' 返回
Adams, Nadiyah
Logistics, Resources Directorate
Ahmed, W*ali*ul
爲 'JR'
Brooks, *Jr*, Cecil
Customer Service Center, Program Administration Directorate
Brown *Jr*, Peter
Document Control and Data Management, Operations Directorate
一個搜索 '李'
搜索更新2
正如意見中的要求,這裏有三大類:
public partial class dept
{
ctor()
public string name { get; set; }
public virtual ICollection<dept_sub> dept_subs { get; set; }
public virtual ICollection<employee> employees { get; set; }
}
public partial class dept_sub
{
ctor()
public string name { get; set; }
public int dept_id { get; set; }
public virtual dept dept { get; set; }
public virtual ICollection<employee> employees { get; set; }
}
public partial class employee
{
ctor()
public string fname { get; set; }
public string lname { get; set; }
public Nullable<int> dept_id { get; set; }
public Nullable<int> dept_sub_id { get; set; }
public virtual dept dept { get; set; }
public virtual dept_sub dept_sub { get; set; }
}
你有一個樣本數據? – Bigeyes
另外,如果'value'在單詞之間有多個空格,則最終會在'searchTerms'數組中找到一些空字符串,這將導致所有記錄匹配。 – wdosanjos
如果你注意到,Nadiyah和Charles都不應該返回 – Ian