如何在linq中展平字典<string,List >并将键保留在结果中

你如何在linq中实现以下目标? 我觉得应该有一个Linq替代方案。

var foods = new Dictionary<string, List>(); foods.Add("Cake", new List() { "Sponge", "Gateux", "Tart" }); foods.Add("Pie", new List() { "Mud", "Apple" }); foods.Add("Roll", new List() { "Sausage" }); var result = new List<Tuple>(); foreach (var food in foods) { foreach (var detail in food.Value) { result.Add(new Tuple(food.Key, detail)); } } ie cake  pie  to cake, sponge cake, gateux pie, apple 

谢谢

您可以使用SelectMany扩展方法:

 var result= foods.SelectMany(f=>f.Value.Select(s=>new Tuple(f.Key, s))) .ToList(); 
  var result = (from food in foods from detail in food.Value select new Tuple(food.Key, detail)).ToList(); 

Linq是一个查询。 这就是’q’代表的意思。 您正在将项目添加到字典中。 试试这个

  Dictionary> foods = new Dictionary>() { {"cake", new List() {"Sponge", "Gateux", "Tart"}}, {"Pie", new List() {"Mud", "Apple"}}, {"Roll", new List() {"Sausage"}}, };