我正在尝试制作合适的linq查询以适应我的搜索功能。
我有一个包含以下列的表:'firstname'| 'lastname'| '描述'。 以下数据:'彼得'| 'Mulder'| “这是一个小小的描述。”
我的'搜索'关键字可能类似于:“peter”或“一点描述”。
现在,如果我在lambda中使用以下linq表达式:
mycontext.persons
.Where(t =>
search.Contains(t.Firstname) ||
search.Contains(t.Lastname) ||
search.Contains(t.Description).Select(p => p)
.ToList();
现在我得到了我的结果,当我使用'peter'时,但如果我使用'pete'或'一点描述',我就没有结果。 如何制作我的linq表达式,以便它可以在列数据中搜索匹配项?
答案 0 :(得分:26)
我认为你只是倒退了:
mycontext.persons
.Where(t =>
t.Firstname.Contains(search) ||
t.Lastname.Contains(search) ||
t.Description.Contains(search))
.ToList();
答案 1 :(得分:4)
一种可能的(但可能不是最优化的解决方案)是将所有字段附加在一起并在搜索字词上执行Contains
。例如
var result = persons.Where(q => (q.Description + " " q.FirstName + " " q.LastName)
.ToLower()
.Contains(searchTerm.ToLower()))
.ToList();
答案 2 :(得分:0)
尝试此代码。
private void SearchData()
{
Model1Container model = new Model1Container();
try
{
var query = model.Scholars.AsQueryable();
if (!string.IsNullOrEmpty(this.txtSearch.Text))
{
// query = query.Where(x=>x.ScholarName.StartsWith(txtSearch.Text));
query = (from Schl in model.Scholars
where Schl.ScholarName.StartsWith(txtSearch.Text) ||
Schl.PhoneRes.StartsWith(txtSearch.Text) ||
Schl.PhoneOff.StartsWith(txtSearch.Text) ||
Schl.Mobile.StartsWith(txtSearch.Text) ||
Schl.Email.StartsWith(txtSearch.Text)
orderby Schl.ScholarName
select Schl);
}
this.dgvScholarList.DataSource = query.ToList();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
答案 3 :(得分:0)
看看NinjaNye.SearchExtensions。这可能正是您所需要的。