โ LINQ๋?
Language Integrated Query์ ์ฝ์๋ก ๋ฐ์ดํฐ ์ง์(Query) ๊ธฐ๋ฅ์ C#๊ณผ ๊ฐ์ .NET ์ธ์ด์ ํตํฉํ๋ ๋๊ตฌ์ด๋ค.
→ LINQ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐฐ์ด, ์ปฌ๋ ์
, ์ ๋ค๋ฆญ ์ปฌ๋ ์
, XML, SQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฑ ๋ค์ํ ๋ฐ์ดํฐ ์์ค์ ๋ํด ์ผ๊ด๋ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ ์ ์๋ค.
โ ์ฟผ๋ฆฌ ๊ตฌ๋ฌธ
var query = from item in collection // ๋ฐ์ดํฐ ์์ค์์ ์์๋ฅผ ๊ฐ์ ธ์จ๋ค
where condition // ์กฐ๊ฑด์ ์ง์ ํ์ฌ ํํฐ๋งํ๋ค
orderby property // ์ ๋ ฌ ๊ธฐ์ค์ ์ง์ ํ๋ค
select item; // ๊ฒฐ๊ณผ ๋ฐํ ํ์์ ์ง์ ํ๋ค
ex)
var evenNumbers = from num in numbers
where num % 2 == 0
select num;
โ ๋ฉ์๋ ๊ตฌ๋ฌธ
var query = collection
.Where(item => condition)
.OrderBy(item => property)
.Select(item => item);
โ ๋ฉ์๋
1. Where : ์กฐ๊ฑด์ ๋ง๋ ์์๋ฅผ ํํฐ๋งํ๋ค.
ex) numbers.Where(n => n%2 == 0);
2. Select : ๊ฐ ์์๋ฅผ ๋ณํํ๋ค.
ex) numbers.Select(n => n*n);
3. OrderBy / OrderBy~Descending : ์์๋ฅผ ์ ๋ ฌํ๋ค.
ex) numbers.OrderBy(n => n);
4. GroupBy : ์์๋ฅผ ๊ทธ๋ฃนํ ํ๋ค.
ex) strings.GroupBy(n => n[0]);
5. Join : ๋ ์ปฌ๋ ์
์ ์ฐ๊ฒฐํ๋ค.
6. GroupJoin : ๊ทธ๋ฃนํ๋ ๊ฒฐ๊ณผ์ ํจ๊ป ๋ ์ปฌ๋ ์
์ ์ฐ๊ฒฐํ๋ค.
7. Aggregate : ์ํ์ค์ ์์๋ฅผ ์ง๊ณํ๋ค.
ex) numbers.Aggregate((total, next) => total + next);
8. Distinct : ์ํ์ค์์ ์ค๋ณต ์์๋ฅผ ์ ๊ฑฐํ๋ค. (ํ๋๋ง ๋จ๊ธฐ๊ณ )
ex) numbers.Distinct();
9. First / FirstOrDefault : ์ํ์ค์ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ๋ฐํํ๋ค.
ex) numbers.First(); / numbers.FirstOrDefault(n => n>5);
10. Any : ์ํ์ค์ ์กฐ๊ฑด์ ๋ง๋ ์์๊ฐ ์๋์ง ํ์ธํ๋ค.
ex) numbers.Any(n => n%2 == 0); // True or False
11. All : ๋ชจ๋ ์์๊ฐ ์กฐ๊ฑด์ ๋ง๋์ง ํ์ธํ๋ค.
ex) numbers.All(n => n>0); // True or False
12. Count / Sum / Average / Min / Max : ๊ฐ์, ํฉ๊ณ, ํ๊ท , ์ต์๊ฐ, ์ต๋๊ฐ
โ ๋ฉ์๋ ์ฒด์ธ
๋ฉ์๋๋ฅผ ์ฐ์์ ์ผ๋ก ํธ์ถํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ฟผ๋ฆฌํ๊ณ ๋ณํํ๋ ๋ฐฉ์
ex) numbers.Where(n => n%2 == 0).Select(n => n*n).OrderBy(n => n);
Where - ํํฐ๋ง > Select - ๋ณํ > OrderBy ์ ๋ ฌ
โ LINQ์ ์ฅ๋จ์
โ ์ฅ์
- ๋ค์ํ ๋ฐ์ดํฐ ์์ค์ ๋ํด ์ผ๊ด๋ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ ์ ์๋ค.
- ์ปดํ์ผ ํ์์ ์ค๋ฅ๋ฅผ ๊ฐ์งํด ๋ฐํ์ ์ค๋ฅ๋ฅผ ์ค์ผ ์ ์๋ค.
- ๊ฐ๊ฒฐํ๋ค
- ์ฟผ๋ฆฌ๊ฐ ์ค์ ๋ก ๋ฐ์ดํฐ์ ์ ๊ทผํ ๋ ๊น์ง ์คํ๋์ง ์์ ์ฑ๋ฅ ์ต์ ํ์ ์ ๋ฆฌํ๋ค (์ง์ฐ ์คํ, Deffered Execution)
โ ๋จ์
- ์๋ชป ์์ฑ๋ LINQ ์ฟผ๋ฆฌ๋ ์ฑ๋ฅ ์ค๋ฒํค๋๋ฅผ ์ ๋ฐํ ์ ์๋ค.
- SQL์ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ง์ํ์ง๋ ์๋๋ค.
โ OrderBy์ ์ฑ๋ฅ?
LINQ์ OrderBy๋ ๊ธฐ๋ณธ์ ์ผ๋ก .NET์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ธ Timsort๋ฅผ ์ฌ์ฉํ๋ค. Timsort๋ ๋ณํฉ ์ ๋ ฌ๊ณผ ์ฝ์ ์ ๋ ฌ์ ํ์ด๋ธ๋ฆฌ๋์ด๋ฉฐ, ์ต์ ์ ๊ฒฝ์ฐ์๋ O(n log n)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ๋๋ค.
'๐ C#' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| var ํค์๋ (0) | 2024.07.28 |
|---|---|
| as, is ํค์๋ (0) | 2024.07.19 |
| ๋ฌธ์์ด ์์ (0) | 2024.07.14 |
| ๋ฐ์ดํฐ ํ์ (0) | 2024.07.08 |
| C# ๊ฐ์ (0) | 2024.07.08 |