有时候我们需要数据根据一些字段进行分组,这时候用orderBy很方便。不多说了。直接上代码:
class Ma { public int number { get; set; } public string name { get; set; } public static List<Ma> ToThis() { List<Ma> ls = new List<Ma>() { new Ma() { number = 1, name = "第一组1" }, new Ma() { number = 1, name = "第一组ss" }, new Ma() { number = 1, name = "第一组rr" }, new Ma() { number = 3, name = "第三组ss" }, new Ma() { number = 3, name = "第三组option" }, new Ma() { number = 2, name = "第二组cake" }, }; return ls; } } //需要分组成的对象,按照number进行分组 public class GroupMa { public int number { get; set; } public List<string> names { get; set; } } [TestMethod] public void TestGroup() { List<Ma> ls = Ma.ToThis(); //List<GroupMa> groupDAta = // (from Ma maObj in ls // group maObj by maObj.number into gData // select new GroupMa // { // number = gData.FirstOrDefault().number, // names = gData.Select(c => c.name).ToList() // }).ToList(); var data = ls.GroupBy(f => f.number) .Select(g => new GroupMa { number = g.FirstOrDefault().number, names = g.Select(o => o.name).ToList() }); Console.Write(""); }
分组后形成的新的数据结构:
当然,对象中嵌套多层对象,分组也是可以的。
orderDTO.sampleGroup = orderDTO.sampleInfo.GroupBy(g => g.sampleCode).Select(o => new SampleInfoGroup { SampleId = o.FirstOrDefault().sampleId, SampleCode = o.Key, sampleStatus = o.FirstOrDefault().sampleStatus, //通过GroupBy进行分组,分组后必须用对象来装 CExpressCompany = o.FirstOrDefault().CExpressCompany, CExpressNumber = o.FirstOrDefault().CExpressNumber, Consignor = o.FirstOrDefault().Consignor, outSampleStatus = o.FirstOrDefault().sampleStatus.ToString(), GroupInfo = o.Select(s => new InfoGroup { mark = s.mark, productName = s.productName, }).ToList() }).ToList();
还是很实用的一个东西!