C# LINQ:转换字典<;int,List<;MyObject>&燃气轮机;列出<;列表<;字符串>&燃气轮机;

C# LINQ:转换字典<;int,List<;MyObject>&燃气轮机;列出<;列表<;字符串>&燃气轮机;,c#,linq,C#,Linq,我的词典结果已 Key Value 1 {"Chicago", 100} 1 {"Newyork", 200} 2 {"Minneapolis", 300} 要将其转换为以下格式的列表 {"Index", "City","Value"}, {1, "Chicago", 100}, {1, "Newyork", 200} {2, "Minneapolis", 300} 这

我的
词典结果

Key               Value
1                 {"Chicago", 100}
1                 {"Newyork", 200}
2                 {"Minneapolis", 300}
要将其转换为以下格式的
列表

{"Index", "City","Value"},
{1, "Chicago", 100},
{1, "Newyork", 200}
{2, "Minneapolis", 300}
这就是我迄今为止所取得的成就

 var list = result.Select(rec => new                 
    {
        Index = rec.Key,
        City = rec.Value.Select(rec1 => rec1.City),
        Value = rec.Value.Select(rec1 => rec1.Value)
    }).ToList();
我得到的是

{"Index", "City", "Value"},
{1, System.Linq.Enumerable.WhereSelectListIterator<MyObject, string>, System.Linq.Enumerable.WhereSelectListIterator<MyObject, int>},
{1, System.Linq.Enumerable.WhereSelectListIterator<MyObject, string>, System.Linq.Enumerable.WhereSelectListIterator<MyObject, int>},
{2, System.Linq.Enumerable.WhereSelectListIterator<MyObject, string>, System.Linq.Enumerable.WhereSelectListIterator<MyObject, int>}

下面的代码是为您工作,但没有得到什么是您的用例

var list = result.Select(rec => new
               {
                  Index = rec.Key,
                  City = rec.Value.City),
                  Value = rec.Value.Value)
            }).ToList();

下面的代码是为您工作,但没有得到什么是您的用例

var list = result.Select(rec => new
               {
                  Index = rec.Key,
                  City = rec.Value.City),
                  Value = rec.Value.Value)
            }).ToList();
这是在创建IEnumerable,而不是字符串。这就是为什么要从中获得System.Linq.Enumerable.Where SelectListIterator

您最好在这里使用for循环

foreach(var kvp in result)
    foreach(var value in kvp)
        //Create string here and add it to your list.
这是在创建IEnumerable,而不是字符串。这就是为什么要从中获得System.Linq.Enumerable.Where SelectListIterator

您最好在这里使用for循环

foreach(var kvp in result)
    foreach(var value in kvp)
        //Create string here and add it to your list.
这就是您需要的:

var Result =  result.SelectMany(r => r.Value.Select(x => new[] { r.Key.ToString(), x.City, x.Value.ToString() }.ToList()));
要将列名作为外部列表的第一个元素,请执行以下操作:

Result.Insert(0, {"Index", "City","Value"}.ToList());
这就是您需要的:

var Result =  result.SelectMany(r => r.Value.Select(x => new[] { r.Key.ToString(), x.City, x.Value.ToString() }.ToList()));
要将列名作为外部列表的第一个元素,请执行以下操作:

Result.Insert(0, {"Index", "City","Value"}.ToList());

您需要这样的输出吗

我有一个解决办法给你。试试看

Dictionary<int, List<MyObject>> result = new Dictionary<int, List<MyObject>>();

result.Add(1, new List<MyObject>() { new MyObject() { City = "Chicago", Value = 100 }, new MyObject() { City = "Newyork", Value = 200 } });
result.Add(2, new List<MyObject>() { new MyObject() { City = "Minneapolis", Value = 300 } });

var resultYouWant = result.SelectMany(p => p.Value.Select(a => new { Index = p.Key, a.City, a.Value })).ToList();
字典结果=新建字典();
添加(1,new List(){new MyObject(){City=“Chicago”,Value=100},new MyObject(){City=“Newyork”,Value=200});
添加(2,new List(){new MyObject(){City=“Minneapolis”,Value=300});
var resultYouWant=result.SelectMany(p=>p.Value.Select(a=>new{Index=p.Key,a.City,a.Value})).ToList();

您需要这样的输出吗

我有一个解决办法给你。试试看

Dictionary<int, List<MyObject>> result = new Dictionary<int, List<MyObject>>();

result.Add(1, new List<MyObject>() { new MyObject() { City = "Chicago", Value = 100 }, new MyObject() { City = "Newyork", Value = 200 } });
result.Add(2, new List<MyObject>() { new MyObject() { City = "Minneapolis", Value = 300 } });

var resultYouWant = result.SelectMany(p => p.Value.Select(a => new { Index = p.Key, a.City, a.Value })).ToList();
字典结果=新建字典();
添加(1,new List(){new MyObject(){City=“Chicago”,Value=100},new MyObject(){City=“Newyork”,Value=200});
添加(2,new List(){new MyObject(){City=“Minneapolis”,Value=300});
var resultYouWant=result.SelectMany(p=>p.Value.Select(a=>new{Index=p.Key,a.City,a.Value})).ToList();



为什么要列出?多维数组可以吗?或者,您可以在第一节中将索引作为属性添加到object中:为什么您的字典能够包含多个键1?就我所知,这是不可能的。那么
result.ToList()
Select
之前呢?
Select
只返回一个迭代器,而不是实际的集合。您必须调用
ToList
来打印元素。但是,您还应该编写一些逻辑来循环每个集合中的元素,因为否则您将得到类似于
System.collections.Generic.List
。您还没有显示您的
MyObject
。为什么要显示列表?多维数组可以吗?或者,您可以在第一节中将索引作为属性添加到object中:为什么您的字典能够包含多个键1?就我所知,这是不可能的。那么
result.ToList()
Select
之前呢?
Select
只返回一个迭代器,而不是实际的集合。您必须调用
ToList
来打印元素。但是,您还应该编写一些逻辑来循环每个集合中的元素,因为否则您将得到类似
System.collections.Generic.List
。您还没有显示您的
MyObject
。抱歉,仅限LINQ!对不起,错过了。尽管如此,我认为旧foreach有时也有一些优点。@user1为什么只有Linq?您根本没有提到这一点,而且,当您有循环时,您可能还可以轻松地为它编写Linq语句。很多时候Linq会使它更复杂,更难阅读,所以我认为这是一个简单而好的答案。对不起,只有Linq!对不起,错过了。尽管如此,我认为旧foreach有时也有一些优点。@user1为什么只有Linq?您根本没有提到这一点,而且,当您有循环时,您可能还可以轻松地为它编写Linq语句。通常Linq会使它更复杂,更难阅读,所以我认为这是一个简单而好的答案。这不应该编译。这不应该编译。你没有按照OP的要求创建一个
列表
。你是吗?{“Index”,“City”,“Value”},{1,“Chicago”,100},{1,“Newyork”,200}{2,“Minneapolis”,300}=>我认为它不是列表结构。是吗?这是OP已经做过的,这不是他需要的。他希望内部
列表的所有元素都是字符串类型。请帮我举一个OP想要的预期输出的例子。我加了一张outputI的照片,我做了一些小改动。var resultYouWant=result.SelectMany(p=>p.Value.Select(a=>new{Index=p.Key,City=a.City,Value=a.Value})).ToList();你没有按照OP的要求创建一个
列表。你是吗?{“Index”,“City”,“Value”},{1,“Chicago”,100},{1,“Newyork”,200}{2,“Minneapolis”,300}=>我认为这不是列表结构。是吗?这是OP已经做过的,这不是他需要的。他希望内部
列表的所有元素都是字符串类型。请帮我举一个OP想要的预期输出的例子。我加了一张outputI的照片,我做了一些小改动。var resultYouWant=result.SelectMany(p=>p.Value.Select(a=>new{Index=p.Key,City=a.City,Value=a.Value})).ToList();我还想要列名。{“Index”,“City”,“Value”},@user1:作为较大列表的第一个元素?我应用了您建议的代码更改。编译器抱怨找不到隐式类型数组的最佳类型。编译器无法识别“new[]”是什么,forMyObject没有Index属性,但输出结果有它。我还需要列名。{“Index”,“City”,“Value”},@user1:作为较大列表的第一个元素?我应用了您建议的代码更改。编译器抱怨找不到隐式类型数组的最佳类型。编译器无法识别“new[]”是什么,forMyObject没有Index属性,但输出结果有它。