集团成员的笛卡尔积

我在表格中有两个或更多组,如下所示:

Id Value GroupId 1 A 1 2 B 1 3 C 2 4 D 2 

现在我想显示总关系(总数:2 * 2 = 4,因为我们有2个组,每个组有2个成员),如下所示:

 A & CA & 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 

但是,我怎么能通过Linq Expression来做到这一点? 我希望结果显示在View(剃刀)中。

更新:我的意思是表中的组成员的笛卡尔积 。

将组groups 。 将第一组移到result 。 然后为每个剩余的group加入result

  IEnumerable 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 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(); 

注意 :这会创建一些临时对象,因此在使用非常大的集合时要注意。