C# 如何在c中使用查询查找是否包含我的列表值的字典列值

C# 如何在c中使用查询查找是否包含我的列表值的字典列值,c#,linq,dictionary,C#,Linq,Dictionary,我有一份价值清单 list1[110,120,130] 我想在字典中检查我的字典表列值是否像 110_abc_ro 120_cfg_go 130_dfg_lo 110_abc_io 170_cfg_jo 是否包含列表值。 我想要像这样的输出 110_abc_ro,110_abc_io代表的是列表值110,因为我无法从这个问题中分辨出您的字典名/键类型,所以我只谈到了这一点。对于每个列表项110、120等,您现在迭代字典中的条目。每当字典中的值包含您从列表中迭代的值时,它都会将其写入字符串,然

我有一份价值清单

list1[110,120,130]
我想在字典中检查我的字典表列值是否像

110_abc_ro
120_cfg_go
130_dfg_lo
110_abc_io
170_cfg_jo
是否包含列表值。 我想要像这样的输出
110_abc_ro,110_abc_io代表的是列表值110

,因为我无法从这个问题中分辨出您的字典名/键类型,所以我只谈到了这一点。对于每个列表项110、120等,您现在迭代字典中的条目。每当字典中的值包含您从列表中迭代的值时,它都会将其写入字符串,然后您可以发送/写入/其他内容

foreach (int i in list1)
{
    string output = "";

    foreach (KeyValuePair<var, string> kvp in yourDictionary)
    {
        if (kvp.Value.Contains(i.ToString()))
        {
            output += kvp.Value + ", ";
        }
    }

    //print your outputstring here.
}
试试这个:

string result= "";
list1.ForEach(item => {
yourDictionary.ToList().ForEach
(
    pair =>
    {
        if (pair.Value.Contains(item.ToString()))
        {
            result = result + pair.Value + ", ";
        }
    }
);
});
可以使用来联接与int列表匹配的所有值

根据MSDN,此方法使用每个元素之间指定的分隔符连接字符串集合的所有元素

例如:


这里有一个简单的解决方案:

int[] list1 = { 110, 120, 130 };
List<string> dict = new List<string> { "110_abc_ro", "120_cfg_go", "130_dfg_lo", "110_abc_io", "170_cfg_jo" };

for (int i = 0; i < list1.Length; i++)
{
    string str = "Values from dictionary containing " + list1[i] + ":\n";
    str += String.Concat(dict.Where(val => val.Contains(list1[i].ToString())).Select(val => val + ", "));
    Console.Write(str);
}

你是指System.Linq表达式中的查询吗?是的,如果可能的话,这将是一个很大的帮助。你可能用错了字典,看起来你最好用这样的东西。var dict=dictionaryList1[110120130]看起来更像元组,而不是字典。这可能只是我的一个困惑点。你能提供一个更好的数据表示片段吗?我有一个数据库,其中包含许多excel文件。我正在从字典中提取数据。我有一个单子,里面有110120130之类的数字。我想弄清楚列表值110是否包含在任何excel文件名中。我们是否可以在这里使用查询来进行此操作?@jaymingaudana请参阅更新的答案。如果您从Lucifer的评论中获得更多信息,您甚至可能会忽略每个人的列表。您知道linq不会按照OP的要求工作,它会选择IEnumerable,这是不正确的。@Lucifer您是正确的。我已经更新了语句,因此它将返回IEnumerable。现在应该没问题了。@Lucifer我选择了不复制它,以保持答案的不同,而不仅仅是更多的相同。而且据我所知,你没有对结果进行分组,即先是全部110,然后是全部120。使用示例OP,您的结果将是110、120、130、110。这样,所有110、120、130等都在一条线上。这确实是一种偏好,但它使答案有所不同:
  string values = String.Join(",", yourDictionary.Where(x => list.Any(ele => x.Value.Contains(ele.ToString()))).Select(x => x.Value).ToList());
int[] list1 = { 110, 120, 130 };
List<string> dict = new List<string> { "110_abc_ro", "120_cfg_go", "130_dfg_lo", "110_abc_io", "170_cfg_jo" };

for (int i = 0; i < list1.Length; i++)
{
    string str = "Values from dictionary containing " + list1[i] + ":\n";
    str += String.Concat(dict.Where(val => val.Contains(list1[i].ToString())).Select(val => val + ", "));
    Console.Write(str);
}