有没有一个好的LINQ方法来做笛卡尔积?

我的班级结构如下:

人
狗(狗1、狗2等)
小狗(小狗A、小狗B等)

有一个人。他有1.n条狗。每只狗有1..n只小狗

我想要一份所有可能的小狗组合的清单,从每只狗身上取一只小狗。例如:

小狗1小狗A,小狗2小狗A
狗1小狗A,狗2小狗B
狗1小狗B,狗2小狗A
狗1小狗B,狗2小狗B

如果是在sql表中,我会执行如下操作来“乘法”表:

从小狗a、小狗b中选择*其中a.parent='dog1'和b.parent='dog2'

有什么灵巧的方法来做这件事吗

非常感谢

如果我理解这个问题,你想要n组小狗的笛卡尔积

如果您在编译时知道有多少个集合,则很容易获得笛卡尔积:

小狗中p1的


来自《狗2》中的p2。小狗
从3号小狗的p3开始
选择新的{p1,p2,p3};

假设dog1有小狗p11,p12,dog2有小狗p21,dog3有小狗p31,p32。这给你

{p11,p21,p31},
{p11,p21,p32},
{p12,p21,p31},
{p12,p21,p32}

其中每一行都是匿名类型。如果您在编译时不知道有多少个集合,您可以稍微多做一些工作。见我关于这个主题的文章:

Computing a Cartesian product with LINQ

还有这个问题:

生成所有可能的组合

一旦有了方法CartesianProduct&lt;T&gt</然后你可以说

CartesianProduct(来自当面狗。狗选择狗。小狗)

得到

{p11,p21,p31},
{p11,p21,p32},
{p12,p21,p31},
{p12,p21,p32}

每一行都是一组小狗

有道理吗

发表评论