通用字典搜索功能

时间:2013-08-06 19:29:21

标签: c# search generics dictionary

我正在创建一个通用词典,它将像一个库,可以添加,删除和搜索书籍,我已经为搜索功能提供了这些功能。

搜索功能有两个字段:标题和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 Story Bro”,我可以搜索“Cool”,它会找到所有带有“Cool”的实例。

编辑:使用我在这里学到的东西,我已经完成了搜索功能:)

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

你有什么应该工作。正如黑暗猎鹰建议尝试:

string searchTerm = TitleBox.Text.ToLower();

答案 2 :(得分: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