728x90
반응형
string[] strings = { "A penny saved is a penny earned.", "The early bird catches the worm.", "The pen is mightier than the sword." };
위 문장을 단어로 나누고, 모음으로 시작하는 단어만 찾아보자.
1. let절 없이 처리하는 경우
//다음의 글을 단어로 쪼개서 모음으로 시작하는 단어를 찾아보자!!
string[] strings =
{
"A penny saved is a penny earned.",
"The early bird catches the worm.",
"The pen is mightier than the sword."
};
//1. 문장을 단어로 쪼갠다.
IEnumerable<string[]> query = from sentence in strings
select sentence.Split(' ');
//2. string 이차원 배열 일차원으로 변경
IEnumerable<string> words = query.SelectMany(x => x);
//3. 문장 단어 중에 모음으로 시작하는 것을 찾는다.
IEnumerable<string> query2 = from word in words
where word[0].ToString().ToLower() == "a"
|| word[0].ToString().ToLower() == "e"
|| word[0].ToString().ToLower() == "i"
|| word[0].ToString().ToLower() == "o"
|| word[0].ToString().ToLower() == "u"
select word;
foreach (var v in query2)
{
Console.WriteLine("\"{0}\" starts with a vowel", v);
}
2. let절을 사용해보자
let은 두 가지 방법으로 사용된다.
* 그 자체를 쿼리할 수 있는 새 범위 변수를 만든다.
* ToLower를 한 번만 호출할 수 있도록 한다.
string[] strings =
{
"A penny saved is a penny earned.",
"The early bird catches the worm.",
"The pen is mightier than the sword."
};
// Split the sentence into an array of words
// and select those whose first letter is a vowel.
var earlyBirdQuery =
from sentence in strings
let words = sentence.Split(' ')
from word in words
let w = word.ToLower()
where w[0] == 'a' || w[0] == 'e'
|| w[0] == 'i' || w[0] == 'o'
|| w[0] == 'u'
select word;
// Execute the query.
foreach (var v in earlyBirdQuery)
{
Console.WriteLine("\"{0}\" starts with a vowel", v);
}
다른 예제 하나 더 해보자
PetOwner[] petOwners = { new PetOwner { Name="Higa", Pets = new List<string>{ "Scruffy", "Sam" } }, new PetOwner { Name="Ashkenazi", Pets = new List<string>{ "Walker", "Sugar" } }, new PetOwner { Name="Price", Pets = new List<string>{ "Scratches", "Diesel" } }, new PetOwner { Name="Hines", Pets = new List<string>{ "Dusty" } } };
S로 시작하는 애완동물 가진 주인이랑 애완동물 이름 표시해보자
1. let 없이 처리하는 경우
var query =
petOwners
.SelectMany(petOwner => petOwner.Pets, (petOwner, petName) => new { petOwner, petName })
.Where(ownerAndPet => ownerAndPet.petName.StartsWith("S"))
.Select(ownerAndPet =>
new
{
Owner = ownerAndPet.petOwner.Name,
Pet = ownerAndPet.petName
}
);
foreach (var obj in query)
{
Console.WriteLine(obj);
}
2. let을 사용해보자
var queryb = from petowner in petOwners
let pets = petowner.Pets
from pet in pets
where pet.StartsWith("S")
select new
{
owner = petowner.Name,
pet = pet
};
// Print the results.
foreach (var obj in queryb)
{
Console.WriteLine(obj);
}
let이 조금 더 가독성이 좋아 보임...
728x90
반응형
'C#' 카테고리의 다른 글
C#] 값 형식 VS 참조 형식 (0) | 2021.12.16 |
---|---|
IEnumerable vs ICollection vs IList 차이점 (0) | 2021.12.02 |
C#] Lambda (0) | 2021.11.05 |
C#] Tuple types (0) | 2021.10.13 |
C#] EmailTemplate 활용하여 메일 발송하기 (0) | 2021.09.28 |
댓글