티스토리 뷰

반응형

두 테이블의 값을 비교해서 원하는 값을 추출해서 사용하는 경우가 많습니다. 특히 DB 에서는 Select ... 로 시작해서 원하는 값을 뽑아 냅니다. 이 방법을 C# 코딩으로 해보기로 했습니다.

 

고객테이블

id

name

1

Terry

2

Charlotte

3

Magnus

4

Rui

간단하 고객 테이블을 생성하였습니다. 고객번호(id)와 이름으로 구성되어 있습니다.

 

 

펫테이블 (고객이 맡겨놓은 반려동물)

id

person_id

name

1

1

Barley

2

1

Happy

3

2

Boots

4

3

Whiskers

5

4

Daisy

고객이 맡겨 놓은 반려 동물입니다. 예를 들기 위한 설정입니다. 펫번호(id), 고객번호(person_id), 펫이름(name) 으로 구성되어 있습니다.

 

그럼 이 테이블을 읽어 오도록 하겠습니다. 여러가지 방법이 있으나 여기서는 가장 간단하게 코딩으로 집어 넣겠습니다.

List<(int, string)> people = new List<(int, string)>()
{
    { (1, "Terry") },
    { (2, "Charlotte") },
    { (3, "Magnus") },
    { (4, "Rui") },
};

간단히 튜플로 List에 고객정보를 담았습니다.

 

List<(int, int, string)> pets = new List<(int, int, string)>()
{
    { (1, 1, "Barley") },
    { (2, 1, "Happy") },
    { (3, 2, "Boots") },
    { (4, 3, "Whiskers") },
    { (5, 4, "Daisy") },
};

펫정보도 간단하게 List에 넣어 두었습니다. 예시를 만들때는 튜플이 편하고 좋습니다.

 

두 정보 중에서 고객 번호로 join을 걸 수 있으므로 그 Linq를 이용하여 해보겠습니다.

  var query = from person in people
              join pet in pets on person.Item1 equals pet.Item2
              select new { OwnerID = person.Item1, OwnerName = person.Item2, PetName = pet.Item3 };

아주 쉽고 간단하게 가져 왔습니다. 위 코드를 보시면 쉽게 이해 할 수 있습니다. 핵심적인 곳은 두번째 줄 

join pet in pets on person.Item1 equals pet.Item2

이 부분입니다. 이 부분이 고객테이블의 고객번호와 펫테이블에 고객번호를 일치 시켜 줍니다.

위 query를 출력해보겠습니다.

foreach (var q in query)
{
    string output = string.Format("{0, -10} {1, -10} {2, -10}\n", q.OwnerID, q.OwnerName, q.PetName);
    Debug.Log( output );
}

========
1          Terry      Barley    
1          Terry      Happy     
2          Charlotte  Boots     
3          Magnus     Whiskers  
4          Rui        Daisy 

고객번호와 고객이름 그리고 펫이름으로 출력하였습니다. 1번 고객 Terry 님이 유일하게 펫이 2마리인것을 확인할 수 있습니다.

 

이렇게 쉽게 원하는 정보를 join으로 가져 올 수 있습니다. 이 방법이 아니면 코딩으로 for문 또는 foreach문을 통해서 원하는 값을 찾아서 넣어주어야 할 것입니다. 쉽고 오히려 더 알기 쉬운 방법으로 개발하세요~

728x90
반응형
댓글