> 데이터 베이스 > MySQL 튜토리얼 > LINQ는 다양한 세트 수를 사용하여 데카르트 곱을 어떻게 수행할 수 있습니까?

LINQ는 다양한 세트 수를 사용하여 데카르트 곱을 어떻게 수행할 수 있습니까?

Patricia Arquette
풀어 주다: 2025-01-17 07:07:12
원래의
522명이 탐색했습니다.

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으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿