2016년 9월 12일 월요일

[C#학원,닷넷학원추천★탑크리에듀][C#닷넷,링크쿼리식]Select,SelectMany예제

[C#닷넷,링크쿼리식]Select,SelectMany예제


Select : 하나의 Collection에서 Select
SelectMany : 여러 Collection에서 Select


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication9
{
    class Customer
    {
        public string Name { get; set; }
        public string Address { get; set; }
        public List<string> Card { get; set; }
    }

    class Program
    {
        static List<Customer> Getcustomers()
        {
            List<Customer> customers = new List<Customer>{
                                     new Customer {
                                         Name = "박길동",
                                         Address ="서울" ,
                                         Card= new List<string>{"BC","HANA", "WOORI"}},
                                     new Customer {
                                         Name = "김길동",
                                         Address ="대전" ,
                                         Card= new List<string>{"BC","WOORI"}},
                                     new Customer {
                                         Name = "가길동",
                                         Address ="춘천" ,
                                         Card= new List<string>{"HANA","WOORI"}},
                                     new Customer {
                                         Name = "하길동",
                                         Address ="속초" ,
                                         Card= new List<string>{"WOORI","BC"}}};
            return customers;
        }

        static void Main(string[] args)
        {
            // customers에서 이름이 '가'로 시작되는 고객의 이름출력
            var result1 = from c in Getcustomers()
                          where c.Name.StartsWith("가")
                          select c;
            foreach (var c in result1)
            {
                Console.WriteLine(c.Name);
            }
            Console.WriteLine("-------------1");

            //new로 만들어내는 익명클래스에서 Address, Name검색
            var result2 = from c in Getcustomers()
                          select new { c.Address, c.Name };
            foreach (var c in result2)
            {
                Console.WriteLine(c);
            }
            Console.WriteLine("-------------2");

            // Select로 Cuatomer의 Card를 출력, foreach문 2개필요
            IEnumerable<List<String>> query3_0 = Getcustomers().Select(c => c.Card);

            foreach (List<String> cardList in query3_0)
            {
                foreach (string card in cardList)
                {
                    Console.WriteLine(card);
                }
            }
            Console.WriteLine("-------------3");

            // SelectMany로 Cuatomer의 Card를 출력, foreach문 하나로 출력
            var result3 = from c in Getcustomers()
                          select c;
            var result3_1 = result3.SelectMany(c => c.Card);

            foreach (var r in result3_1)
            {
                Console.WriteLine(r);
            }
            Console.WriteLine("-------------4");

            // 메소드기반 쿼리식에서 SelectMany를 직접사용
            var result4 = Getcustomers().AsQueryable().SelectMany(Card => Card.Card);
            foreach (var r in result4)
            {
                Console.WriteLine(r);
            }
            Console.WriteLine("-------------5");

            // 메소드기반 쿼리식에서 Where를 이용하여 BC카드를 가진 Customer의 Name을 출력
            var result5 = Getcustomers().AsQueryable().Where(c => c.Card.Contains("BC")).Select(c => c.Name);
            foreach (var c in result5)
            {
                Console.WriteLine(c);
            }
            Console.WriteLine("-------------6");

            // 메소드기반 쿼리식에서 Customer.Name별로 Card를 출력
            var result6 = Getcustomers().AsQueryable().SelectMany(cust => cust.Card, 
                                                                 (cust, card) => new { cust.Name, card });
            foreach (var c in result6)
            {
                Console.WriteLine(c);
            }
            Console.WriteLine("-------------7");

    
            // 메소드기반 쿼리식에서 Address가 "서울" 이면서 "H"로 시작되는 Card를 가진 
            // 고객 Name 및 Card출력
            var result7 = Getcustomers().Where(cust => cust.Address == "서울")
                                       .SelectMany(cust => cust.Card, (cust, card) => new { cust.Name, card })
                                       .Where(custmerCard => custmerCard.card.StartsWith("H"));
                                       
            foreach (var c in result7)
            {
                Console.WriteLine(c);
            }
            Console.WriteLine("-------------8");
        }        
    }    
}


[결과]
가길동
-------------1
{ Address = 서울, Name = 박길동 }
{ Address = 대전, Name = 김길동 }
{ Address = 춘천, Name = 가길동 }
{ Address = 속초, Name = 하길동 }
-------------2
BC
HANA
WOORI
BC
WOORI
HANA
WOORI
WOORI
BC
-------------3
BC
HANA
WOORI
BC
WOORI
HANA
WOORI
WOORI
BC
-------------4
BC
HANA
WOORI
BC
WOORI
HANA
WOORI
WOORI
BC
-------------5
박길동
김길동
하길동
-------------6
{ Name = 박길동, card = BC }
{ Name = 박길동, card = HANA }
{ Name = 박길동, card = WOORI }
{ Name = 김길동, card = BC }
{ Name = 김길동, card = WOORI }
{ Name = 가길동, card = HANA }
{ Name = 가길동, card = WOORI }
{ Name = 하길동, card = WOORI }
{ Name = 하길동, card = BC }
-------------7
{ Name = 박길동, card = HANA }
-------------8

댓글 없음:

댓글 쓰기