簡體   English   中英

使用 linq 的 C# 搜索查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM