笛卡尔乘积为集团成员 [英] Cartesian Product for Group members

查看:176
本文介绍了笛卡尔乘积为集团成员的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有2个或以上的团体如下面的表格:





<预类=郎无prettyprint-覆盖> ID值的GroupId
1 A 1
2 b 1
3 C 2
4 D 2

现在我想告诉总的关系(总:2 * 2 = 4,因为我们有2组每一个有2名成员)象下面这样:



<预类=郎无prettyprint-覆盖> A和ç
A和D
&B酒店放大器; C
&B酒店放大器; ð

或用三组:



<预类=郎无prettyprint-覆盖> ID值的GroupId
1 A 1
2 b 1
3 C 2
4 D 2
5 E 3
6 F 3

我们有2 * 2 * 2 = 8的关系:





<预类=郎无prettyprint-覆盖> A和C&放大器; Ë
A和D&放大器; E
&B酒店放大器; C&放大器; E
&B酒店放大器; D&放大器; Ë
A和C&放大器; F
比率和放大器; D&放大器; F
&B酒店放大器; C&放大器; F
&B酒店放大器; D&放大器; ˚F



不过,我怎么可以通过 LINQ表达式做到这一点?我要的结果在View(剃刀)来显示



更新:
我的意思是的在表小组成员的笛卡尔乘积

解决方案

组组到。移动第一组到结果。然后对于每个剩余,他们一起与结果

 的IEnumerable<串GT;结果; 

组VAR =(从列表$ B $通过item.GroupId B组项目项目为GRP
选择grp.Select(T => t.Value))。了ToList() ;

结果= groups.First();

groups.RemoveAt(0);

groups.ForEach(委托(IEnumerable的<串>价值)
{
结果=(从价值
选择R的结果$ B $; B R从V ++ v).ToList();

});


I have 2 or more Groups like below in a table:

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

Now I wanna show total relationships (total: 2*2=4 since we have 2 groups each one with 2 members) like below:

A & C 
A & D
B & C
B & D

Or with three Groups:

Id  Value GroupId
1   A       1
2   B       1
3   C       2
4   D       2
5   E       3
6   F       3

We have 2*2*2=8 relationships:

A & C & E
A & D & E
B & C & E
B & D & E
A & C & F
A & D & F
B & C & F
B & D & F

But, how can I do this via Linq Expression? I want the result to show in View(razor).

Update: My meaning is Cartesian Product of Group members in the Table.

解决方案

Group the groups into groups. move the first group into result. Then for each remaining group, join them with 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();

            });

这篇关于笛卡尔乘积为集团成员的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆