-1

我正在创建一个通用字典,它的作用就像一个能够添加、删除和搜索图书的库,并且我已经将这些功能放在了搜索功能中。

搜索功能有两个字段:书名和 ISBN,我可以使用 ISBN 搜索书籍,但我不能搜索书名。

这是我的搜索代码:

private void Searchbtn_Click(object sender, EventArgs e)
    {
        string searchTerm = TitleBox.Text;

        if (ISBNBox.Text.Length == 5)
        {
            foreach (KeyValuePair<string, Book> b in books)
            {
                if (b.Value.ISBN == int.Parse(ISBNBox.Text))
                {
                    ISBNBox.Text = b.Value.ISBN.ToString();
                    TitleBox.Text = b.Value.Title.ToString();
                    chkLoan.Enabled = true;
                }
            }
        }
        else if (TitleBox.Text != "")
        {
            foreach (KeyValuePair<string, Book> b in books)
            {
                if (b.Value.Title.ToLower().Contains(searchTerm))
                {
                    ISBNBox.Text = b.Value.ISBN.ToString();
                    TitleBox.Text = b.Value.Title;
                    chkLoan.Enabled = true;
                }
            }
        }
        else
        {
            MessageBox.Show("Searching Requires the ISBN or Title field to be filled");
        }
    }

我怎样才能让我的搜索功能让我也搜索标题?

我该如何搜索部分字符串?例如,我可以搜索“Cool”而不是“Cool Story Bro”,它会找到所有带有“Cool”的实例。

编辑:使用我在这里学到的东西,我有完整的搜索功能:)

4

3 回答 3

0

你在那里的东西应该可以工作。正如 Dark Falcon 建议的那样尝试:

string searchTerm = TitleBox.Text.ToLower();
于 2013-08-06T19:37:29.997 回答
0

尝试这个

foreach (KeyValuePair<string, Book> b in books)
{
    if (b.Value.Title.IndexOf(searchTerm,StringComparison.InvariantCultureIgnoreCase) >=0)
    {
        ISBNBox.Text = b.Value.ISBN.ToString();
        TitleBox.Text = b.Value.Title;
        chkLoan.Enabled = true;
    }
}

如果找到, IndexOf方法给出给定字符串的第一个索引,可选地它允许我们搜索CaseInsensitive

于 2013-08-06T19:34:48.597 回答
0

我可能在您的问题中遗漏了一个细节,但一般来说,如果您想对键和值进行关键字搜索,您可以执行以下操作:

Dictionary<string, Book> d = new Dictionary<string, Book>();
//Fill dictionary
string searchterm = //get searchterm
List<Book> results = new List<Book>();
results.AddRange(from i in d where i.Key.Contains(searchterm) select i.Value);
results.AddRange(from i in d where i.Value.Title.Contains(searchterm) select i.Value);
//Print Results
于 2013-08-06T19:39:41.437 回答