[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
댓글 없음:
댓글 쓰기