Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.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

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# LINQ在选择作为字典的属性时创建新的匿名类型_C#_Linq - Fatal编程技术网

C# LINQ在选择作为字典的属性时创建新的匿名类型

C# LINQ在选择作为字典的属性时创建新的匿名类型,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 IDictionar

我有一个简单的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; }
}
但是,当我运行此程序时,我得到的是一个字典列表,但其形状如下:

[
  {TypeDetails: {the dictionary i want},
  {TypeDetails: {the dictionary i want}},
  (...)
]
我所期待的是:

[
  {the dictionary i want},
  {the dictionary i want},
  (...)
]
澄清一下:我希望这是真的: 类型[0]。类型详细信息。相等值[0]

就像我在做的一样

types.Select((myType) => new {myType.TypeDetails})
如果我得到任何其他属性,则select的行为与我预期的一样。 我找不到任何文件表明字典是否得到了特殊处理,也找不到任何其他关于为什么会发生这种情况的线索

使用字典的值,如下所示:

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

您的退货期望/说明不符合以下条件之一:

我正试图返回一份字典列表

或者,假设myType为myType类型,则实际代码不匹配:

types.SelectmyType=>myType.TypeDetails

下面的示例代码确实返回了一个字典集合,看看您的代码与它的不同之处会很有趣:

var data = new[]
{
    new MyType()
    {
        TypeDetails = new Dictionary<string, object>() { { "foo", "bar" } }
    },
    new MyType()
    {
        TypeDetails = new Dictionary<string, object>() { { "baz", "qux" } }
    },
};
var r = data.Select(d => d.TypeDetails);

你试过了吗?用.SelectMany代替.SelectmyType.TypeDetails.Values代替myType.TypeDetails会有什么问题?我不明白你的问题,types.SelectmyType=>myType.TypeDetails会产生一个IEnumerable,看起来像你想要的?或者将其放入一个列表types.SelectmyType=>myType.TypeDetails.ToList?请详细说明…我无法重新创建您的IssueWLP@AussieJoe的评论给了我正确的方向。使用.Values屏蔽了包含我想要的dict的集合集合。所以我把Select改为SelectMany,它给了我正确的结果。这行代码的结尾是这样的:types.selectManyType=>myType.TypeDetails.Values@AussieJoe如果你愿意,把它写下来作为一个响应,我会把它标记为答案。这个集合里面有什么?如果运行数据[0].TypeDetails.equalsr[0]true会发生什么?这是刚才看到你的评论的同一个对象-看起来它是我建议的前一个对象-你不想要字典列表,你想要字典中包含的值的列表。是的,值和键。已经有一段时间了,我的C显然比我想象的要粗糙_ツ_/¯. 我必须考虑一下,因为我在解析过程中遇到了困难。
var data = new[]
{
    new MyType()
    {
        TypeDetails = new Dictionary<string, object>() { { "foo", "bar" } }
    },
    new MyType()
    {
        TypeDetails = new Dictionary<string, object>() { { "baz", "qux" } }
    },
};
var r = data.Select(d => d.TypeDetails);