您的位置:首页 > 编程语言 > C#

集合中取出列名相同的,并把其他列的值合并成数组

2015-07-17 16:00 676 查看
需求:有这样一个集合

List<User> lst = new List<User>{

new User{ name="zhangsan",YFYE=2.1D,XFSJ=4.2D },

new User{ name="zhangsan",YFYE=2.2D,XFSJ=4.3D },

new User{ name="zhangsan",YFYE=2.3D,XFSJ=4.4D },

new User{ name="lisi",YFYE=2.2D,XFSJ=4.3D },

new User{ name="lisi",YFYE=2.3D,XFSJ=4.4D },

new User{ name="lisi",YFYE=2.4D,XFSJ=4.5D },

new User{ name="lisi",YFYE=2.5D,XFSJ=4.6D }

};


把name相同的数据的YFYE的字段拼成一个数组。然后转成Json

例如:{“name”:”zhangsan”,”datas”:[2.1,2.2,2.3]}

代码如下:

public static void Test()
{
List<User> lst = new List<User>{
new User{ name="zhangsan",YFYE=2.1D,XFSJ=4.2D },
new User{ name="zhangsan",YFYE=2.2D,XFSJ=4.3D },
new User{ name="zhangsan",YFYE=2.3D,XFSJ=4.4D },
new User{ name="lisi",YFYE=2.2D,XFSJ=4.3D },
new User{ name="lisi",YFYE=2.3D,XFSJ=4.4D },
new User{ name="lisi",YFYE=2.4D,XFSJ=4.5D },
new User{ name="lisi",YFYE=2.5D,XFSJ=4.6D }
};

List<NewModel> lstNewModel = new List<NewModel>();

//这里可能有简单的方法,我没研究过
List<User> lstFirst = null;
//取出name种类
var query = from newlist in lst group newlist by newlist.name into g select g;
//分组的数量
var iCount = query.Count();

foreach (var item in query)
{
lstFirst = new List<User>();
//每个集合的长度
for (int i = 0; i < lst.Count; i++)
if (lst[i].name == item.Key)
lstFirst.Add(lst[i]);
NewModel model = new NewModel();
model.name = item.Key;
//把得到的全部放到数组中
var data=new double[lstFirst.Count];
for (int i = 0; i < lstFirst.Count; i++)
{
data[i] = lstFirst[i].YFYE;
}
model.datas = data;
//当前数据已获取
lstNewModel.Add(model);
}
JavaScriptSerializer serializer = new JavaScriptSerializer();
Console.WriteLine(serializer.Serialize(lstNewModel));
}


测试结果如下:



欢迎加入技术交流群(169767436)这里有各种大神共同帮你解决问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C#集合并集