Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 查找字典中的值_C#_Linq_Dictionary - Fatal编程技术网

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,那么这里所看到的所有代码都应该工作。但是也要考虑使用描述作为密钥将您的值添加到第二个字典中!我考虑过,但可能我有一些值具有相同的描述,那么我不能使用描述作为键。