我的字典包含Product
个值,其中包含description
等属性。
在textbox1_textchanged
处理程序中,我想在字典中搜索description
中包含特定文本的产品。
我试过这个:
var values = (from pv in mydictionary
where pv.Value.description.Contains(textBox1.Text)
select pv.Value);
此代码无效,因为我按下的第二个键值var值为空。
我找到的所有示例都是通过键搜索,但我需要搜索字典的值。
答案 0 :(得分:6)
但您拥有的不是有效代码。您正在尝试过滤具有特定描述但缺少关键元素的值。您需要添加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;
答案 1 :(得分:2)
尝试
var values = mydictionary.Where(k => k.Value.description.Contains(textBox1.Text))
.Select(k => k.Value);
答案 2 :(得分:0)
将where子句更改为:
where value != null && value.description != null && value.description.Contains(textBox1.Text)
答案 3 :(得分:-1)
您可能需要考虑的另一件事是string.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