首页 > 数据库 > mysql教程 > LINQ 如何执行具有可变数量集合的笛卡尔积?

LINQ 如何执行具有可变数量集合的笛卡尔积?

Patricia Arquette
发布: 2025-01-17 07:07:12
原创
520 人浏览过

How Can LINQ Perform a Cartesian Product with a Variable Number of Sets?

使用LINQ实现具有可变数量集合的笛卡尔积

假设一个类结构包含一个人、多条狗以及每条狗的多只小狗。目标是生成所有可能的小狗组合列表,从每条狗中选择一只小狗。

在SQL中,可以使用笛卡尔积运算来实现这一点,例如:

<code class="language-sql">select * from puppies a, puppies b where a.parent='dog1' and b.parent='dog2'</code>
登录后复制

可以使用LINQ执行类似的操作吗?

如果狗的集合数量(即狗的数量)在编译时已知,则可以使用一种直接的方法:

<code class="language-csharp">from p1 in dog1.Puppies
from p2 in dog2.Puppies
from p3 in dog3.Puppies
select new {p1, p2, p3};</code>
登录后复制

但是,如果狗的集合数量未知,则需要一种更通用的方法。Eric Lippert在他的文章和StackOverflow中详细描述了一种解决方案,该解决方案涉及创建一个自定义方法来计算笛卡尔积:

<code class="language-csharp">public static IEnumerable<IEnumerable<T>> CartesianProduct<T>(IEnumerable<IEnumerable<T>> sets) {
    // ... implementation omitted for brevity
}</code>
登录后复制

使用此方法,可以将所需的查询表示为:

<code class="language-csharp">CartesianProduct(from dog in person.Dogs select dog.Puppies)</code>
登录后复制

这将返回一系列小狗序列,其中每个序列代表来自每条狗的一只小狗的组合。例如,如果狗'dog1'和'dog2'分别拥有小狗'p11'、'p12'和'p21',则输出将为:

<code>{p11, p21}
{p11, p22}
{p12, p21}
{p12, p22}</code>
登录后复制

以上是LINQ 如何执行具有可变数量集合的笛卡尔积?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板