组成员的笛卡尔乘积
本文关键字:笛卡尔 组成员 | 更新日期: 2023-09-27 18:27:58
我在一个表中有两个或多个组,如下所示:
Id Value GroupId
1 A 1
2 B 1
3 C 2
4 D 2
现在我想展示总的关系(总数:2*2=4,因为我们有两个小组,每个小组有两名成员),如下所示:
A & C
A & D
B & C
B & D
或者有三组:
Id Value GroupId
1 A 1
2 B 1
3 C 2
4 D 2
5 E 3
6 F 3
我们有2*2*2=8个关系:
A & C & E
A & D & E
B & C & E
B & D & E
A & C & F
A & D & F
B & C & F
B & D & F
但是,如何通过LinqExpression实现这一点?我希望结果显示在视图(剃刀)中。
更新:我的意思是表中的群成员的笛卡尔乘积。
将组分组为groups
。将第一组移动到CCD_ 2中。然后,对于每个剩余的group
,将它们与result
:连接起来
IEnumerable<string> result;
var groups = (from item in list
group item by item.GroupId into grp
select grp.Select(t => t.Value)).ToList();
result = groups.First();
groups.RemoveAt(0);
groups.ForEach(delegate(IEnumerable<string> value)
{
result = (from r in result
from v in value
select r + " " + v).ToList();
});
我不确定我是否正确理解你的问题,但在我看来,它是来自不同组的元素的过滤笛卡尔乘积。如果是这样的话,这个代码可能会有所帮助:
var result = elements.SelectMany(x => elements,
(x, y) => Tuple.Create(x, y))
.Where(t => t.Item1.GroupId < t.Item2.GroupId)
.Select(t => Tuple.Create(t.Item1.Value, t.Item2.Value))
.ToList();
注意:这会创建一些临时对象,因此在与非常大的集合一起使用时要注意。