【问题标题】:C# search query with linq使用 linq 的 C# 搜索查询
【发布时间】:2013-04-26 18:24:07
【问题描述】:

我正在尝试进行合适的 linq 查询以适应我的搜索功能。

我有一个包含以下列的表格:'firstname' | '姓氏' | '描述'。 使用以下数据:“彼得”| '穆德' | '这是一个简短的描述。'

我的“搜索”关键字可能类似于:“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 表达式,以便它可以在列数据中搜索匹配项?

【问题讨论】:

  • 你可以看这里:Filtering collection with LINQ
  • search.Contains(t.Firstname)t.Firstname.Contains(search)?
  • 你正在做的是 "'pete' or 'a little description'".Contains("peter") 在 Linq 中的第一次测试,这将始终返回 false。
  • 天哪。你们说的太对了。我倒退了,一直盯着错误的地方看。

标签: c# linq


【解决方案1】:

我认为你只是把它倒过来了:

mycontext.persons
    .Where(t => 
        t.Firstname.Contains(search) || 
        t.Lastname.Contains(search) || 
        t.Description.Contains(search))
    .ToList();

【讨论】:

  • 那行不通。他的搜索字符串 == "'pete' or 'a little description'".
  • @CodeNaked:说谁?他说他的搜索字符串可能是“pete”,也可能是“a little description”。
  • 只是想知道 .Select 之前是否缺少括号?
  • 我的“搜索”关键字可能类似于:"peter" or "a little description"....但如果我使用'pete' or 'a little description'
  • 解决方案看起来不错。但是 .Select(p => p) 甚至需要吗?在 t.Description.Contains(search) 之后缺少一个结束括号
【解决方案2】:

一种可能(但可能不是最优化的解决方案)是将所有字段附加在一起并在搜索词上执行Contains。例如

var result = persons.Where(q => (q.Description + " " q.FirstName + " " q.LastName)
                    .ToLower()
                    .Contains(searchTerm.ToLower()))
                    .ToList();

【讨论】:

  • 您可能需要添加某种分隔符,否则“tionpete”之类的搜索将匹配不正确。
  • 天哪。你们说的太对了。我倒退了,一直盯着错误的地方看。
【解决方案3】:

试试这个代码。

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);
    }
}

【讨论】:

    猜你喜欢
    • 2015-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-16
    • 1970-01-01
    相关资源
    最近更新 更多