如何在C#中从嵌套List获取模型名与对应ModelID的映射结果
解决方案:获取ModelID与ModelName的关联配对
首先明确你的Items类结构(基于描述补充):
public class Items { public string ModelID { get; set; } public List<string> ModelNames { get; set; } // 对应你提到的字符串列表类型属性 } // 示例Models方法 public List<Items> Models() { return new List<Items> { new Items { ModelID = "model1", ModelNames = new List<string> { "m10", "m11" } }, new Items { ModelID = "model2", ModelNames = new List<string> { "m10", "m12" } } }; }
要生成(model1,m10)这类关联结果,关键是在SelectMany中保留ModelID和ModelName的关联关系,使用SelectMany的重载版本,传入结果选择器来配对两者:
// 第一步:获取ModelID与每个ModelName的配对 var modelPairs = Models() .SelectMany( item => item.ModelNames, // 遍历每个Items的ModelNames列表 (item, modelName) => new { item.ModelID, ModelName = modelName } // 将ModelID和单个ModelName配对 ); // 第二步:格式化输出目标格式 foreach (var pair in modelPairs) { Console.WriteLine($"({pair.ModelID},{pair.ModelName})"); }
如果想直接生成格式化后的字符串列表,可以合并两步:
var formattedResults = Models() .SelectMany(item => item.ModelNames, (item, name) => $"({item.ModelID},{name})"); // 输出所有结果 foreach (var result in formattedResults) { Console.WriteLine(result); }
关键说明
你之前的SelectMany(c => c.ModelName)只提取了子集合的元素,丢失了父元素的ModelID信息。通过使用带结果选择器的SelectMany重载,就能将每个父元素的ModelID与子集合中的每个ModelName一一绑定,从而得到需要的关联配对。
内容的提问来源于stack exchange,提问作者Mmr F
相关产品推荐
相关产品推荐

