最近在做一个数据库比对工具,查询索引的时候,需要把索引做一个转换
查询出的数据:
IX_Fn_T_Moneny_PID | NONCLUSTERED | ID |
IX_Fn_T_Moneny_Name_PID | NONCLUSTERED | ID |
IX_Fn_T_Moneny_Name_PID | NONCLUSTERED | Name |
需要转化成
IX_Fn_T_Moneny_PID | NONCLUSTERED | ID |
IX_Fn_T_Moneny_Name_PID | NONCLUSTERED | ID,Name |
就想着用Linq来实现分组转换,却遇到了问题,原来Linq的GroupBy()返回的是一个IGrouping<Key,T>类型,一时间不知道怎么取Group中的数据了。经过多番查找,终于找到了正确用法,笔记一下。
//获取索引 并且合并 t.indexModes = indexList.Where(p => p.PID == t.ID).GroupBy(c => new { c.isUnique, c.Name, c.sType, c.typeDesc, c.PID }).Select(c => new IndexMode { Name = c.Key.Name,PID = c.Key.PID, isUnique = c.Key.isUnique, sType = c.Key.sType, typeDesc = c.Key.typeDesc, colName = string.Join(",", c.ToList().Select(x => x.colName)) }).ToList();
居然可以IGrouping<K,T>.ToList()成T,也是神奇了。