본문 바로가기
C#

C#] LINQ 쿼리 키워드 let

by Fastlane 2021. 11. 5.
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

댓글