集团成员的笛卡尔积
我在表格中有两个或更多组,如下所示:
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();
注意 :这会创建一些临时对象,因此在使用非常大的集合时要注意。