vts*_*vts 6 c# linq algorithm list
我有一个类别表:
Catid | Desciption
1 | Color
2 | Size
3 | Material
Run Code Online (Sandbox Code Playgroud)
和一个类别项目表
Catid | Name
1 | Red
1 | Blue
1 | Green
2 | Small
2 | Med
2 l Large
3 | Cotton
3 | Silk
Run Code Online (Sandbox Code Playgroud)
我需要遍历所有项目并将其显示在这样的标签中:
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
Run Code Online (Sandbox Code Playgroud)
请注意:可能有更多或更少的类别.这不是预先确定的.
有什么建议?谢谢
dtb*_*dtb 20
var result = list.GroupBy(t => t.Id).CartesianProduct();
Run Code Online (Sandbox Code Playgroud)
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}));
}
Run Code Online (Sandbox Code Playgroud)
例:
var list = new[]
{
new { Id = 1, Description = "Red" },
new { Id = 1, Description = "Blue" },
new { Id = 1, Description = "Green" },
new { Id = 2, Description = "Small" },
new { Id = 2, Description = "Med" },
new { Id = 2, Description = "Large" },
new { Id = 3, Description = "Cotton" },
new { Id = 3, Description = "Silk" },
};
var result = list.GroupBy(t => t.Id).CartesianProduct();
foreach (var item in result)
{
Console.WriteLine(string.Join(" ", item.Select(x => x.Description)));
}
Run Code Online (Sandbox Code Playgroud)
输出:
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
Run Code Online (Sandbox Code Playgroud)
Pra*_*ana 12
尝试交叉加入
var combo = from l1 in LIst1
from l2 in List2
select new {l1, l2};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5084 次 |
| 最近记录: |