복붙노트

[SQL] 카티 제품을 할 수있는 좋은 LINQ의 방법이 있습니까?

SQL

카티 제품을 할 수있는 좋은 LINQ의 방법이 있습니까?

그래서 같은 클래스 구조를 가지고 :

Person
Dogs (dog 1, dog 2, etc)
Puppies (puppy A, puppy B, etc)

한 사람이있다. 그는 1..N 개를 가지고있다. 각 개는 1..N 강아지가 있습니다.

나는 각 개에서 1 개 강아지를 복용, 강아지의 가능한 조합 모두의 목록을합니다. 예 :

개 1 강아지 A, 강아지 2 강아지 A를 1 개 강아지 A, 2 개 강아지 B 1 개 강아지 B, 2 개 강아지 1 개 강아지 B, 2 개 강아지 B

이 SQL 테이블에있는 경우, 나는 테이블 '곱셈'에 다음과 같은 일을 할 것입니다 :

select * from puppies a, puppies b where a.parent='dog1' and b.parent='dog2'

이 좀 일을 몇 가지 LINQ 틱 방법이 있나요 ???

정말 고마워

해결법

  1. ==============================

    1.내가 질문을 이해한다면, 당신은 강아지의 N 세트의 직교 제품합니다.

    내가 질문을 이해한다면, 당신은 강아지의 N 세트의 직교 제품합니다.

    당신이 얼마나 많은 세트 컴파일시에 알고있는 경우에 직교 제품을 쉽게 얻을 수 있습니다 :

    from p1 in dog1.Puppies
    from p2 in dog2.Puppies
    from p3 in dog3.Puppies
    select new {p1, p2, p3};
    

    가정하자 dog1는 dog2는 강아지 P21을 가지고 있으며, dog3은 P32를 강아지 P31을 가지고, 강아지 P11, P12있다. 이것은 당신을 제공합니다

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

    어디에서 각 행은 익명의 유형입니다. 당신은 얼마나 많은 세트를 컴파일 타임에 알 수없는 경우, 당신은 약간 더 많은 작업과 그 작업을 수행 할 수 있습니다. 주제에 내 문서를 참조하십시오

    http://ericlippert.com/2010/06/28/computing-a-cartesian-product-with-linq/

    이 StackOverflow의 질문 :

    가능한 모든 조합을 생성

    당신이 방법을 일단 곱 집합 당신은 말할 수

    CartesianProduct(from dog in person.Dogs select dog.Puppies)
    

    얻을 수

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

    어디에서 각 행은 강아지의 순서이다.

    이해가?

  2. ==============================

    2.dogs.Join (강아지 () => 진실 () => 진실 (하나, 둘) => 새로운 튜플 (하나, 둘));

    dogs.Join (강아지 () => 진실 () => 진실 (하나, 둘) => 새로운 튜플 (하나, 둘));

    당신은 정기적으로 가입 할 수 있지만 내가 모든 조합이 유효 원하기 때문에 선택기는 모두 같은 값을 반환한다. 조합 할 때, 하나의 튜플 (또는 사용자가 선택한 다른 데이터 구조)에 모두 넣어.

  3. ==============================

    3.당신이 강아지와 강아지의 모든 가능한 조합을 원하는 경우에, 당신은 십자가에 가입 할 것입니다 :

    당신이 강아지와 강아지의 모든 가능한 조합을 원하는 경우에, 당신은 십자가에 가입 할 것입니다 :

    from dog in Dogs
    from puppy in Puppies
    select new
    {
        Dog = dog,
        Puppy = puppy
    }
    
  4. from https://stackoverflow.com/questions/4073713/is-there-a-good-linq-way-to-do-a-cartesian-product by cc-by-sa and MIT license