c# - LINQ 在选择字典属性时创建新的匿名类型

标签 c# linq

我有一个像这样的简单 POCO:

[JsonObject(NamingStrategyType = typeof (CamelCaseNamingStrategy))]
public class MyType
{

    public string Id { get; set; }

    public string Name;

    [JsonExtensionData(ReadData = true, WriteData = true)]
    public IDictionary<string, object> TypeDetails { get; set; }
}

还有一个方法给我一个 MyType 的列表 我正在尝试返回 Dictionary<string,object> 的列表我得到的对象列表的所有类型详细信息。 像这样:

types.Select((myType) => myType.TypeDetails)

但是,当我运行它时,我得到的是一个字典列表,但具有以下形状:

[
  {TypeDetails: {the dictionary i want},
  {TypeDetails: {the dictionary i want}},
  (...)
]

我期待的是:

[
  {the dictionary i want},
  {the dictionary i want},
  (...)
]

澄清一下:我希望这是真的: types[0].TypeDetails.equals(r[0])

和我做的一样

types.Select((myType) => new {myType.TypeDetails})

如果我获得任何其他属性,则选择的行为与我预期的一样。 我找不到任何表明字典是否得到特殊对待的文档,也找不到任何其他关于为什么会发生这种情况的线索。

最佳答案

使用.SelectMany()在字典的上,像这样:

types.SelectMany((myType) => myType.TypeDetails.Values)

关于c# - LINQ 在选择字典属性时创建新的匿名类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50338965/

相关文章:

c# - 为什么我的数据表没有任何结果进来?

c# - 递归地从目录中删除文件但保持目录结构不变

.net - Order by 不适用于 LINQ 中的 Concat()

linq - 动态 LINQ : Comparing Nested Data With Parent Property

c# - 具有辅助角色的 Azure 服务总线主题和订阅

c# - 从将部署到 GAC 的自定义 .Net 数据提供程序调用非托管代码时,我应该在哪里部署要使用的 DLL?

c# - 如何拆分数组中的元素并将其作为新数组返回

linq - 如何反射(reflect)具有泛型接口(interface)的类型,并获取该泛型类型

c# - 将属性序列化为元素中的 Xml 属性

c# - 获取 NEF 格式图像的拍摄日期