我的班级结构如下:
人
狗(狗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<;T></然后你可以说
CartesianProduct(来自当面狗。狗选择狗。小狗)
得到
{p11,p21,p31},
{p11,p21,p32},
{p12,p21,p31},
{p12,p21,p32}
每一行都是一组小狗
有道理吗