在访问数据库中搜索单词的一部分

时间:2015-04-17 12:31:28

标签: c# linq

我有一个访问数据库,其中包含Title,Director和Year等列。

我有连接到程序的访问数据库。只有当标题包含一个单词时,我才能搜索数据库并将电影的标题打印到listBox。例如,如果我搜索电影“psycho”,电影将显示在listBox中。

现在我想知道如何搜索像“the”这样的特定单词,并将所有带有“the”的电影标题打印到listBox。

那时,我正在使用的教科书未能深入研究。 也许我没有使用正确的方法来做我想做的事。

private void searchButton_Click(object sender, EventArgs e)
    {
        listBox1.Items.Clear();
        string lowerCaseData = textBox1.Text.ToLower();
        if (titleButton.Checked)
        {
            var query =
                from m in this.moviesDataSet.Movies
                where m.Title == lowerCaseData
                select m;
            foreach (var m in query)
            {
                listBox1.Items.Add(m.Title);
            }

        }
    }


    private void Form1_Load(object sender, EventArgs e)
    {
        // TODO: This line of code loads data into the 'moviesDataSet.Movies' table. You can move, or remove it, as needed.
        this.moviesTableAdapter.Fill(this.moviesDataSet.Movies);

    }

2 个答案:

答案 0 :(得分:1)

而不是Contains

的完全匹配检查

根据LINQ提供程序,Contains检查应转换为SQL LIKE语句,该语句不区分大小写,因此您的检查应该是:

where m.Title.Contains(lowerCaseData)

但是对于内存中的集合,Contains会执行区分大小写的匹配。在这种情况下,String.IndexOf可以像:

一样使用
where m.Title.IndexOf(lowerCaseData, StringComparison.OrdinalIgnoreCase) >= 0)

答案 1 :(得分:0)

您的where查询完全匹配。请改用Contains

where m.Title.ToLower().Contains(lowerCaseData)