CatID | Desciption 1 | color 2 | Size 3 | Material
和一个类别项目表
CatID | name 1 | Red 1 | Blue 1 | Green 2 | Small 2 | Med 2 l Large 3 | Cotton 3 | Silk
我需要遍历所有项目并将其显示在这样的标签中:
Red Small Cotton Red Small Silk Red Med Cotton Red Med Silk Red Large Cotton Red Large Silk Blue Small Cotton Blue Small Silk Blue Med Cotton Blue Med Silk Blue Large Cotton Blue Large Silk Green Small Cotton Green Small Silk Green Med Cotton Green Med Silk Green Large Cotton Green Large Silk
请注意:可能有更多或更少的类别.这不是预先确定的.
有什么建议?
谢谢
var result = List.GroupBy(t => t.ID).CartesianProduct();
使用Eric Lippert’s Blog CartesianProduct Extension Method:
static IEnumerable<IEnumerable<T>> CartesianProduct<T>( this IEnumerable<IEnumerable<T>> sequences) { IEnumerable<IEnumerable<T>> emptyProduct = new[] { Enumerable.Empty<T>() }; return sequences.Aggregate( emptyProduct,(accumulator,sequence) => from accseq in accumulator from item in sequence select accseq.Concat(new[] {item})); }
例:
var List = new[]{ new { ID = 1,Description = "Red" },new { ID = 1,Description = "Blue" },Description = "Green" },new { ID = 2,Description = "Small" },Description = "Med" },Description = "Large" },new { ID = 3,Description = "Cotton" },Description = "Silk" },};var result = List.GroupBy(t => t.ID).CartesianProduct();foreach (var item in result){ Console.Writeline(string.Join(" ",item.Select(x => x.Description)));}
输出:
Red Small CottonRed Small SilkRed Med CottonRed Med SilkRed Large CottonRed Large SilkBlue Small CottonBlue Small SilkBlue Med CottonBlue Med SilkBlue Large CottonBlue Large SilkGreen Small CottonGreen Small SilkGreen Med CottonGreen Med SilkGreen Large CottonGreen Large Silk总结
以上是内存溢出为你收集整理的使用Linq和C#创建列表中项目的所有可能组合全部内容,希望文章能够帮你解决使用Linq和C#创建列表中项目的所有可能组合所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)