【问题标题】:linq c# object ToDictionarylinq c# object ToDictionary
【发布时间】:2020-06-03 20:32:16
【问题描述】:

我正在尝试在 linq 中编写查询,我希望 x.key 将其添加到我的字典中,但它没有显示出来。不知道如何进一步进行。我浏览了其他线程,找不到与此对象类似的示例。我是新手,非常感谢任何帮助

if (emp.something != null)
            {
                foreach (var item in emp.something)
                {
                    if (item.Value.someId.AllowMultiple.Equals(false))
                    {
                        var ff = (singleObject) item.Value;
                        if (ff.Value != null)
                        {
                            Dict.Add((int)ff.Value, item.Key);
                        }
                    }

                }
            }


            emp.something?.Where(x => x.Value.someId.AllowMultiple.Equals(false))
                .Select(y => (singleObject) y.Value)
                .ToDictionary(y => y.Value, x.

【问题讨论】:

  • 你能提供更多代码来审查吗? IT 将有助于了解emp.something 是什么,并且由于它是某种形式的集合,因此很高兴看到该集合中对象的代码。此信息将极大地帮助您获得更好的答案。
  • 我道歉尼克。下面的 linq 按预期工作。是的,它是一个集合,值是一个具有 2 个属性 .nextime 的对象,我会清楚地发布我的问题。感谢您的快速回复,祝您有愉快的一天。

标签: linq c#-4.0


【解决方案1】:

您的ToDictionary 调用正在处理之前从Select 返回的任何内容。由于在该方法中,您返回 Value 属性,因此 ToDictionary 处理的集合是 Value 值的集合。换句话说,它对前面命令中的x 值一无所知。您必须将其包含在投影中才能在“下游”使用它。

相当于你的循环似乎是:

emp.something?.Where(item => item.Value.someId.AllowMultiple.Equals(false)
              .Select(item => new {item, ff = (singleObject) item.Value} 
              .Where(x => x.ff.Value != null)
              .ToDictionary(x => (int)x.ff.Value, x => x.item.Key);

但是演员阵容和嵌套的Values 让人困惑。如果您的循环有效,我会坚持使用它 - 调试起来会容易得多,并且等效的 Linq 查询更难(在我看来)理解)。

【讨论】:

  • 您在发帖前是否对此进行了测试? .ToDictionary 的语法错误。
  • 非常感谢。 linq 和 loop 都按预期工作(是的,修复了 linq 中的语法)。感谢您的解释 。现在我明白了它背后的执行过程
猜你喜欢
  • 2010-12-30
  • 1970-01-01
  • 2010-09-19
  • 1970-01-01
  • 1970-01-01
  • 2021-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多