[英]C# search query with linq
我正在嘗試進行合適的 linq 查詢以適應我的搜索功能。
我有一個包含以下列的表:'firstname' | '姓氏' | '描述'。 具有以下數據: 'Peter' | '穆德' | “這是一個小小的描述。”
我的“搜索”關鍵字可能類似於:“peter”或“a little description”。
現在,如果我在 lambda 中使用以下 linq 表達式:
mycontext.persons
.Where(t =>
search.Contains(t.Firstname) ||
search.Contains(t.Lastname) ||
search.Contains(t.Description).Select(p => p)
.ToList();
現在我得到了我的結果,當我使用 'peter' 時,但是如果我使用 'pete' 或 'a little description' 我沒有得到任何結果。 如何制作我的 linq 表達式,以便它可以在列數據中搜索匹配項?
我認為你只是倒退了:
mycontext.persons
.Where(t =>
t.Firstname.Contains(search) ||
t.Lastname.Contains(search) ||
t.Description.Contains(search))
.ToList();
一種可能的(但可能不是最優化的解決方案)是將所有字段附加在一起並在搜索詞上執行“ Contains
”。例如
var result = persons.Where(q => (q.Description + " " q.FirstName + " " q.LastName)
.ToLower()
.Contains(searchTerm.ToLower()))
.ToList();
試試這個代碼。
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);
}
}
看看NinjaNye.SearchExtensions 。 它可能正是您所需要的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.