我有一个访问数据库,其中包含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);
}
答案 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)