for循环处理字典,改用linq的问题

qq_24225873 2018-07-26 01:49:38
有个字典对象 cmds ,构造如下代码第一行

我想根据字典对象cmds中的第二层字典的某个值来判断返回这个二级字典

for循环的实现如下,我想请问用linq该怎么写?

我试了2种都不对



private static Dictionary<string, Dictionary<string,string>> cmds = new Dictionary<string, Dictionary<string, string>>();

foreach (KeyValuePair<string, Dictionary<string, string>> cmd in cmds)
{
Dictionary<string, string> c = cmd.Value;
if (c.Values.Contains(portName))
{
return c;
}
}

var query = cmds.Where(cmd => cmd.Value.Values.Contains(portName)).Select(cmd => cmd.Value);
var query2 = from cmd in cmds
from c in cmd.Value
where c.Value.Contains(portName)
select c;


...全文
166 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
正怒月神 2018-07-26
  • 打赏
  • 举报
回复
通过selectmany把所有的dict整理到一起。
然后就可以全部输出了。
正怒月神 2018-07-26
  • 打赏
  • 举报
回复
游北亮 2018-07-26
  • 打赏
  • 举报
回复
上面少打了一个.Value


Dictionary<string, Dictionary<string, string>> cmds = new Dictionary<string, Dictionary<string, string>>();
var ret = cmds.FirstOrDefault(item => item.Value.Values.Contains(portName));
if(ret != null)
return ret.Value;
游北亮 2018-07-26
  • 打赏
  • 举报
回复
你的foreach代码,是返回第一个符合条件的元素,
而你写的linq是返回数组,当然 不对了。

根据你的foreach,对应的linq应该是:

Dictionary<string, Dictionary<string, string>> cmds = new Dictionary<string, Dictionary<string, string>>();
return cmds.FirstOrDefault(item => item.Value.Values.Contains(portName));

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧