搜索字典中的值
本文关键字:字典 搜索 | 更新日期: 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