๋ฐ์ํ
๐ง LINQ๋?
LINQ๋ "Language Integrated Query"์ ์ฝ์๋ก,
C# ์ฝ๋ ์์์ SQL์ฒ๋ผ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ์กฐํํ๊ณ ๊ฐ๊ณตํ ์ ์๊ฒ ํด์ฃผ๋ ๋ฌธ๋ฒ์ด์ผ.
โ LINQ์ ๋ชฉ์
- ๋ฐฐ์ด, ๋ฆฌ์คํธ, ๋์ ๋๋ฆฌ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฑ ์ฌ๋ฌ ์ข ๋ฅ์ ์ปฌ๋ ์ ์์
- ๋ฐ์ดํฐ๋ฅผ ํํฐ๋ง, ์ ๋ ฌ, ๋ณํ, ์ง๊ณํ ์ ์์
- ๋ฐ๋ณต๋ฌธ ์์ด ๊ฐ๊ฒฐํ๊ณ ๊ฐ๋ ์ฑ ์ข์ ์ฝ๋๋ก ์ฒ๋ฆฌ ๊ฐ๋ฅ
๐ LINQ ๊ธฐ๋ณธ ๋ฌธ๋ฒ (2๊ฐ์ง ๋ฐฉ์)
- ๋ฉ์๋ ์ฒด์ด๋ ๋ฐฉ์ (๋๋ค์ ๊ธฐ๋ฐ)
- ์ฟผ๋ฆฌ ์(Query Expression) ๋ฐฉ์ (SQL์ฒ๋ผ ์๊น)
โ ์์ : ๋ฆฌ์คํธ์์ ์ง์๋ง ๊ณ ๋ฅด๊ธฐ
๐น 1. ๋ฉ์๋ ์ฒด์ด๋ ๋ฐฉ์
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6 };
var evenNumbers = numbers.Where(n => n % 2 == 0);
foreach (var num in evenNumbers)
{
Console.WriteLine(num); // 2, 4, 6
}
- Where : ์กฐ๊ฑด ํํฐ๋ง
- n => n % 2 == 0 : ์ง์ ์กฐ๊ฑด (๋๋ค์)
๐น 2. ์ฟผ๋ฆฌ ์ ๋ฐฉ์
var evenNumbers = from n in numbers
where n % 2 == 0
select n;
foreach (var num in evenNumbers)
{
Console.WriteLine(num); // 2, 4, 6
}
๋ง์น SQL ์ฟผ๋ฆฌ๋ฅผ C# ์์ ์ง์ด๋ฃ์ ๊ฒ์ฒ๋ผ ์ธ ์ ์์
๐ฏ ์์ฃผ ์ฐ๋ LINQ ํจ์ ์์ฝ
ํจ์ | ์ค๋ช |
Where() | ์กฐ๊ฑด ํํฐ๋ง |
Select() | ๋ณํ (๊ฐ๊ณต) |
OrderBy() / OrderByDescending() | ์ ๋ ฌ |
First() / FirstOrDefault() | ์ฒซ ๋ฒ์งธ ์์ |
Any() / All() | ์กฐ๊ฑด ๋ง์กฑ ์ฌ๋ถ |
Count() / Sum() / Max() / Min() | ์ง๊ณ ์ฐ์ฐ |
ToList() | ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌ์คํธ๋ก ๋ฐํ |
โ ์์ : ์์ดํ ๋ชฉ๋ก์์ ํน์ ์กฐ๊ฑด ํํฐ๋ง
var items = new List<(int id, string name)>
{
(0, "๋๋ฌด์นผ"),
(1, "์ฒ ๊ฒ"),
(2, "๋ค์ด์๊ฒ"),
(3, "๋๋ฌด๋ฐฉํจ")
};
// ์ด๋ฆ์ '๋๋ฌด'๊ฐ ๋ค์ด๊ฐ ์์ดํ
๋ง ๋ฝ๊ธฐ
var woodItems = items.Where(item => item.name.Contains("๋๋ฌด"));
foreach (var item in woodItems)
{
Console.WriteLine($"{item.id}: {item.name}");
}
๐ก LINQ์ ์ฅ์
- ๋ฐ๋ณต๋ฌธ ์์ด ๊ฐ๊ฒฐํ๊ฒ ํํ ๊ฐ๋ฅ
- ๊ฐ๋ ์ฑ ํฅ์
- ๋ค์ํ ๋ฐ์ดํฐ ์์ค(๋ฐฐ์ด, List, DB ๋ฑ)์ ์ ์ฉ ๊ฐ๋ฅ
โ ์ฃผ์ํ ์
- LINQ๋ **์ง์ฐ ์คํ(lazy evaluation)**์ ๊ธฐ๋ณธ์ผ๋ก ํ๋ค
→ foreach, ToList() ๊ฐ์ ๊ฑธ๋ก ๊ฒฐ๊ณผ๋ฅผ ์จ์ผ ์ค์ ๋ก ์คํ๋จ - ๋ฌด๊ฑฐ์ด ์ฐ์ฐ์ LINQ๋ก ์ฒ๋ฆฌํ ๋ ์ฑ๋ฅ์ ๊ณ ๋ คํด์ผ ํจ
โ
์์ ์ ์น ๊ฐ๋ฐ ๋ฐฐ์ ์๋ SQL์ ๋ฐฐ์ ์๋๋ฐ ์ธ์ ๊ฐ ์ธ ์ผ์ด ์์ง ์์๊น ์ถ๋ค ๋ฉ์๋ ์ฒด์ด๋ ๋ฐฉ์๋
์ ๋ฒ์ ๋ฐฐ์ ๋ ๋ธ๋ฆฌ๊ฒ์ดํธ ๋๋ค์์ด๋ ๋๋์ด ๋น์ทํ๋ฐ ๊ทธ๊ฑด ์ด์ ํจ์๋ฅผ ๋ณ์์ฒ๋ผ ์ฌ์ฉํ๋๊ฑฐ๊ณ
์ด๊ฑฐ๋ ์ฝ๊ฐ ๊ทธ๋ฅ ๋๋ค์ ์ฒ๋ผ ์ฐ๋๊ฑฐ ๊ฐ๋ค!
๋ฐ์ํ
'C#' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
C# - ์ฝ์ ๋ธ๋์ญ ๊ฒ์ & ์ฌ์ฉ๋๋ ์์ ๋ค (3) | 2025.07.09 |
---|---|
C# - C#์ผ๋ก ๊ฐ๋จํ ์์ดํ ๋งค๋์ ๊ตฌํํ๊ธฐ - List์ LINQ๋ก ์ปฌ๋ ์ ๊ด๋ฆฌ ์ฐ์ต (0) | 2025.07.08 |
C# - ์คํ ํ๋ ์์ด๋? (Stack Frame) vs ์คํ(Stack) (3) | 2025.07.08 |
C# - List(tuple) vs Dictionary (4) | 2025.07.08 |
C# - ConsoleKey(์ฝ์ํค) (0) | 2025.07.08 |