如何用LINQ将Test类列表转换为minVal和maxVal的二维数组?
问题描述
我有一个包含不同属性的Test类列表,类定义如下:
public class Test { public string grade { get; set; } public int minVal { get; set; } public int maxVal { get; set; } }
我需要通过选择minVal和maxVal两列,生成类似[[0,10],[11,20],...]格式的二维数组,以便在JavaScript中用于填充ChartJS图表。我尝试过以下几种解决方案:
var result = list.Select(team => new string[] { "["+team.minVal +","+ team.maxVal +"]"}).ToArray(); var result = list.Select(team => new string[] { team.minVal ,team.maxVal }).ToArray();
但未能得到想要的二维数组格式[[minVal,maxVal],[minVal,maxVal],...],请问是否有单行LINQ查询的解决方案?
解决方案
直接生成数值类型的二维数组即可,单行LINQ写法如下:
var result = list.Select(t => new int[] { t.minVal, t.maxVal }).ToArray();
这段代码会生成int[][]类型的二维数组,之后用JSON序列化工具(比如.NET自带的JsonSerializer.Serialize(result))将其转换为JSON字符串,就能得到ChartJS所需的[[0,10],[11,20],...]格式。
你之前的尝试存在两个问题:
- 第一种写法将每个区间拼接成了单个字符串,最终得到的是
["[0,10]","[11,20]"]这类字符串数组,并非目标格式 - 第二种写法把数值转成了字符串数组,结果为
[["0","10"],["11","20"]],而ChartJS需要的是纯数值类型的数组
内容的提问来源于stack exchange,提问作者Osama Rizwan
相关产品推荐
相关产品推荐

