C# 群成员的笛卡尔积

C# 群成员的笛卡尔积,c#,linq,C#,Linq,我有两个或更多组,如下表所示: Id值GroupId 1 A 1 2 B 1 3 C 2 4D2 现在我想展示总体关系(总计:2*2=4,因为我们有2个组,每个组有2个成员),如下所示: A&C A&D 食宿 食宿 或分为三组: Id值GroupId 1 A 1 2 B 1 3 C 2 4D2 5 E 3 6f3 我们有2*2*2=8个关系: A&C&E A&D&E 食宿及娱乐 B&D&E酒店 A&C&F A&D&F 食宿 B&D&F酒店 但是,如何通过Linq表达式实现这一点?我希

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

Id值GroupId
1 A 1
2 B 1
3 C 2
4D2
现在我想展示总体关系(总计:2*2=4,因为我们有2个组,每个组有2个成员),如下所示:

A&C
A&D
食宿
食宿
或分为三组:

Id值GroupId
1 A 1
2 B 1
3 C 2
4D2
5 E 3
6f3
我们有2*2*2=8个关系:

A&C&E
A&D&E
食宿及娱乐
B&D&E酒店
A&C&F
A&D&F
食宿
B&D&F酒店
但是,如何通过Linq表达式实现这一点?我希望结果显示在视图中(razor)

更新:
我的意思是表中的组成员。

我不确定是否正确理解了您的问题,但在我看来,它似乎是来自不同组的元素的过滤笛卡尔积。如果是这样的话,该代码可以帮助:

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();
var result=elements。选择many(x=>elements,
(x,y)=>Tuple.Create(x,y))
.Where(t=>t.Item1.GroupIdTuple.Create(t.Item1.Value,t.Item2.Value))
.ToList();

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

将组分组为
组。将第一组移动到
结果中
。然后,对于每个剩余的
,使用
结果

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

            });
i可数结果;
变量组=(来自列表中的项
按item.GroupId将项分组到grp中
选择grp.select(t=>t.Value)).ToList();
结果=组。首先();
组。移除(0);
groups.ForEach(委托(IEnumerable值)
{
结果=(来自结果中的r)
从v值开始
选择r+“”+v).ToList();
});

这里不清楚您使用的“状态”是什么意思。。。你的意思是从每组中选择一个条目吗?这些数据来自哪里?(在LINQ to SQL中可能很难做到,但在LINQ to Objects中相对简单。@JonSkeet State表示成员之间基于组的总体关系。是的,每次从每个组中选择一个条目,与另一个组成员一起显示,每个组中有单独的成员。从数据库提交数据我强烈建议您给出一个exa。)mple包含三个组。您的问题目前非常不清楚。@JonSkeet我用一个包含三个组成员的示例更新了问题。谢谢。这对两个以上的组有何作用?我认为OP需要三个值的元组,例如,如果有三个组。@JonSkeet,是的,我们不知道,我是这样理解的。让我们来看看让我们等待OP澄清…OP现在已经澄清了它。谢谢。当我使用必要条件避免生成相同的
元组时,您的代码在两组中运行良好,如(a,b)=(b,a)。但是当我不知道有多少组(组)时,如何找出解决方案存在?我测试了你的答案。没有意义。你确定它的真实逻辑/语法吗?我以为你只想要计数。我会尝试编辑我的答案的。非常感谢:)