๋ฐ˜์‘ํ˜•

๐Ÿง  LINQ๋ž€?

LINQ๋Š” "Language Integrated Query"์˜ ์•ฝ์ž๋กœ,
C# ์ฝ”๋“œ ์•ˆ์—์„œ SQL์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ์กฐํšŒํ•˜๊ณ  ๊ฐ€๊ณตํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋ฌธ๋ฒ•์ด์•ผ.


โœ… LINQ์˜ ๋ชฉ์ 

  • ๋ฐฐ์—ด, ๋ฆฌ์ŠคํŠธ, ๋”•์…”๋„ˆ๋ฆฌ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋“ฑ ์—ฌ๋Ÿฌ ์ข…๋ฅ˜์˜ ์ปฌ๋ ‰์…˜์—์„œ
  • ๋ฐ์ดํ„ฐ๋ฅผ ํ•„ํ„ฐ๋ง, ์ •๋ ฌ, ๋ณ€ํ˜•, ์ง‘๊ณ„ํ•  ์ˆ˜ ์žˆ์Œ
  • ๋ฐ˜๋ณต๋ฌธ ์—†์ด ๊ฐ„๊ฒฐํ•˜๊ณ  ๊ฐ€๋…์„ฑ ์ข‹์€ ์ฝ”๋“œ๋กœ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

๐Ÿ“Œ LINQ ๊ธฐ๋ณธ ๋ฌธ๋ฒ• (2๊ฐ€์ง€ ๋ฐฉ์‹)

  1. ๋ฉ”์„œ๋“œ ์ฒด์ด๋‹ ๋ฐฉ์‹ (๋žŒ๋‹ค์‹ ๊ธฐ๋ฐ˜)
  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์„ ๋ฐฐ์› ์—ˆ๋Š”๋ฐ ์–ธ์  ๊ฐ„ ์“ธ ์ผ์ด ์žˆ์ง€ ์•Š์„๊นŒ ์‹ถ๋‹ค ๋ฉ”์„œ๋“œ ์ฒด์ด๋‹ ๋ฐฉ์‹๋„

์ €๋ฒˆ์— ๋ฐฐ์› ๋˜ ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ๋žŒ๋‹ค์‹์ด๋ž‘ ๋А๋‚Œ์ด ๋น„์Šทํ•œ๋ฐ ๊ทธ๊ฑด ์ด์ œ ํ•จ์ˆ˜๋ฅผ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๋Š”๊ฑฐ๊ณ 

์ด๊ฑฐ๋Š” ์•ฝ๊ฐ„ ๊ทธ๋ƒฅ ๋žŒ๋‹ค์‹ ์ฒ˜๋Ÿผ ์“ฐ๋Š”๊ฑฐ ๊ฐ™๋‹ค!

๋ฐ˜์‘ํ˜•