搜索字典中的值

本文关键字:字典 搜索 | 更新日期: 2023-09-27 18:08:34

我有一个包含Product值的字典,其属性如description。在textbox1_textchanged处理程序中,我想在字典中搜索具有description中特定文本的Products。

我试过了:

var values = (from pv in mydictionary
              where pv.Value.description.Contains(textBox1.Text)
              select pv.Value);

这段代码不起作用,因为我按下的第二个键value var values是空的。

我找到的所有例子都在搜索键,但我需要搜索字典的值

搜索字典中的值

您所拥有的不是有效的代码。您正在尝试过滤具有特定描述的值,但您遗漏了一个关键元素。您需要添加where子句来完成它。

var values =
    from pv in mydictionary
    where pv.Value.description.Contains(textBox1.Text)
    select pv.Value;

更好的写法是直接查看字典的值。

var values =
    from value in mydictionary.Values // Note: we're looking through the values only,
                                      // not all the key/value pairs in the dictionary
    where value.description.Contains(textBox1.Text)
    select value;

要使其不区分大小写,您可以尝试使用String.IndexOf(),因为它是少数几个可以忽略大小写进行搜索的比较之一。

var values =
    from value in mydictionary.Values
    where value.description
               .IndexOf(textBox1.Text, StringComparison.OrdinalIgnoreCase) != -1
               // any value that isn't `-1` means it contains the text
               // (or the description was empty)
    select value;

Try

var values =  mydictionary.Where(k => k.Value.description.Contains(textBox1.Text))
                          .Select(k => k.Value);

将where子句改为:

where value != null && value.description != null && value.description.Contains(textBox1.Text) 

您可能要考虑的另一件事是字符串。Contains方法将执行区分大小写的搜索。

var str = "The quick brown fox blah";
var test1 = "quick";
var test2 = "Quick";
Console.WriteLine(string.Format("{0} CONTAINS {1} = {2}", str, test1, str.Contains(test1)));
Console.WriteLine(string.Format("{0} CONTAINS {1} = {2}", str, test2, str.Contains(test2)));
//Output
The quick brown fox blah CONTAINS quick = True
The quick brown fox blah CONTAINS Quick = False

如果你不能进行大小写不敏感的搜索,这样上面两个都将返回true,你应该把字符串放在小写的前面…

Console.WriteLine(string.Format("{0} CONTAINS {1} = {2}", str, test1, str.ToLower().Contains(test1.ToLower())));
Console.WriteLine(string.Format("{0} CONTAINS {1} = {2}", str, test2, 
str.ToLower().Contains(test2.ToLower())));
//Output
The quick brown fox blah CONTAINS quick = True
The quick brown fox blah CONTAINS Quick = True