C# 查找字典中的值
我有一个包含C# 查找字典中的值,c#,linq,dictionary,C#,Linq,Dictionary,我有一个包含产品值的字典,其属性类似于说明。 在textbox1\u textchanged处理程序中,我想搜索字典中说明中包含特定文本的产品 我试过这个: var values = (from pv in mydictionary where pv.Value.description.Contains(textBox1.Text) select pv.Value); 此代码不工作,因为我按下的第二个键values var values为
产品
值的字典,其属性类似于说明
。
在textbox1\u textchanged
处理程序中,我想搜索字典中说明中包含特定文本的产品
我试过这个:
var values = (from pv in mydictionary
where pv.Value.description.Contains(textBox1.Text)
select pv.Value);
此代码不工作,因为我按下的第二个键values var values为空
我找到的所有示例都在搜索关键字,但我需要搜索字典中的值。试试看
var values = mydictionary.Where(k => k.Value.description.Contains(textBox1.Text))
.Select(k => k.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;
但是,您拥有的代码无效。您试图筛选具有特定描述的值,但缺少一个关键元素。您需要添加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;
为了使其不区分大小写,您可以尝试使用,因为这是可以忽略大小写进行搜索的少数比较之一
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;
将where子句更改为:
where value != null && value.description != null && value.description.Contains(textBox1.Text)
你想考虑的另一件事是String。包含方法将执行区分大小写的搜索。
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
那么你按什么键,我的字典的内容是什么?它是否包含您搜索的文本?顺便说一句,您的示例没有编译,您需要在第二行的第一行插入where
关键字。是的,我遗漏了where关键字,但在我的代码中,它是且不起作用。在dictionary value中,我只有一个id_product、name、description的对象,我想在文本框中找到产品名称并在dictionary的value中搜索。我已经清理了您的问题,并添加了where
,因为这里似乎只是一个输入错误。我不知道你在写代码后说了什么,所以我就不说了。谢谢你。代码后面的一行是,我找到了使用此代码但使用key而不是value的示例。这是我测试的第一件事,但value没有方法包含。@uoah我没有描述。我的“剪贴”与您的查询基本相同,但似乎您在何处缺少了where
关键字。是的,对不起,我遗漏了where关键字,但它不起作用。有什么建议吗?这取决于你的字典中有什么值以及你在搜索什么文本。由于您没有给出任何示例输入,我无法告诉您哪里出了问题。请注意,此搜索区分大小写,包括文本框中的所有内容。因此,如果您键入了额外的空格,您可能找不到您要查找的项目。我如何在键/值对中搜索?在我的字典值中有一个description=“cocacola”的对象,当我在文本框中键入名称时,如果我写“co”将查找cocacola,但当我写“coc”时它没有找到您最初通过键/值对查看的内容。但因为关键是什么并不重要,所以没有必要(因此我建议)。此外,请在问题中包括这些信息。它应该仍然可以工作,但仍然有一些信息,你没有显示,这是造成问题。如果<代码> >“CycOLA”。包含(“COC”)<代码>返回<代码> true,那么这里所看到的所有代码都应该工作。但是也要考虑使用描述作为密钥将您的值添加到第二个字典中!我考虑过,但可能我有一些值具有相同的描述,那么我不能使用描述作为键。