LINQ(Language INtegrated Query)´Â ¾ð¾î µ¶¸³ÀûÀÎ
ÁúÀǹ®ÀÌ¸ç µ¥ÀÌÅ͸¦ ´Ù·ç´Â »õ·Î¿î ¹æ¹ýÀÌ´Ù. ÇÁ·Î±×·¥Àº µ¥ÀÌÅÍ°¡ ÀÖ¾î¾ß µ¿ÀÛÇÏ¸ç µ¥ÀÌÅ͸¦ °ü¸®ÇÏ´Â °ÍÀÌ
ÁÖµÈ ÀÓ¹«ÀÌ´Ù. ´ë¿ë·®ÀÇ µ¥ÀÌÅÍ´Â º¸Åë ¼¹ö°¡ °ü¸®ÇÏ°í ÇÁ·Î±×·¥Àº ¼¹öÀÇ µ¥ÀÌÅ͸¦ È°¿ëÇÑ´Ù. Äõ¸®´Â ¿øÇÏ´Â µ¥ÀÌÅ͸¦ °Ë»öÇÏ´Â Áö½Ã»çÇ×ÀÌ´Ù. DB ¼¹ö¿¡°Ô ¿øÇÏ´Â
Á¶°ÇÀ» Àü´ÞÇϸé Áö½Ã´ë·Î µ¥ÀÌÅ͸¦ ±¸ÇØ ¸®ÅÏÇÑ´Ù. µ¥ÀÌÅ͸¦ Àб⸸ ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ÇÊÅ͸µ, Á¤·Ä, ±×·ìÇÎ µîÀÇ Ã³¸®±îÁö Æ÷ÇÔÇÑ´Ù. LINQ´Â ÀÌ·± ÀÛ¾÷À» Ŭ¶óÀ̾ðÆ® ¾ð¾î¿¡ ÅëÇÕÇÑ´Ù.
LINQ´Â ¾ð¾î¿¡ µ¶¸³ÀûÀÌ´Ù. ¿©±â¼
¾ð¾î´Â ÀÌÁßÀÇ Àǹ̸¦ °¡Áö´Âµ¥ Äõ¸® ´ë»óÀÎ µ¥ÀÌÅÍ ¼Ò½º¸¦ ĪÇϱ⵵ ÇÏ°í Äõ¸® ½ÇÇà ¾ð¾î¸¦ ĪÇϱ⵵ ÇÑ´Ù.
LINQ´Â ¾çÂÊÀ¸·Î ´Ù µ¶¸³ÀûÀÌ´Ù. µ¥ÀÌÅÍ ¼Ò½º¿¡ µû¶ó Äõ¸® ¾ð¾î°¡ ´Ù¸¥µ¥ °ü°èÇü DB´Â SQLÀ» ¾²°í XMLÀº XPath·Î °Ë»öÇÑ´Ù. LINQ´Â µ¥ÀÌÅÍ ¼Ò½º¿¡ µû¶ó ´Ù¼¸ °¡Áö ¹üÁÖÀÇ
Äõ¸®¹®À» Á¦°øÇÑ´Ù.
LINQ to Object
LINQ to DataSet
LINQ to SQL
LINQ to Entities
LINQ to XML
°¢ ¹üÁÖ´Â Äõ¸® ´ë»ó°ú µ¥ÀÌÅÍ ¼Ò½º¸¦ ÁغñÇÏ´Â °úÁ¤¸¸ Á¶±Ý¾¿ ´Ù¸¦ »Ó Äõ¸® ¹®¹ýÀº °°´Ù. ±×·¡¼ DB¿¡ Äõ¸®ÇÏ´Â ¹æ½ÄÀ»
XML ¹®¼³ª Ä÷º¼Ç¿¡ ±×´ë·Î Àû¿ëÇÒ ¼ö ÀÖ´Ù. SQLµµ Ç¥ÁØÀÌ°í XPathµµ Ç¥ÁØÀε¥ LINQ´Â ÀÌ·± Ç¥ÁصéÀ» ÅëÇÕÇÏ·Á´Â ½ÃµµÀÌ´Ù.
Äõ¸® ½ÇÇà ¾ð¾î´Â C#, ºñÁÖ¾ó º£ÀÌÁ÷ µîÀÌ ÀÖ°í ÀÌ·ÐÀûÀ¸·Î ´å³ÝÀÇ ¸ðµç
¾ð¾î¸¦ ¾µ ¼ö ÀÖ´Ù. ¾ð¾î¿¡ µû¶ó Äõ¸® ¹æ¹ýÀÌ ´Þ¶óÁöÁö¸¸ LINQ¸¦
¾²¸é ¾ð¾î¿¡ »ó°ü¾øÀÌ ¶È°°Àº Äõ¸®¹®À» »ç¿ëÇÒ ¼ö ÀÖ´Ù.
LINQ´Â ÇÁ·Î±×·¡¹Ö ¾ð¾î¿Í µ¥ÀÌÅÍ ¼Ò½º »çÀÌ¿¡ À§Ä¡Çϸç ÀÓÀÇÀÇ ¾ð¾î·Î
ÀÓÀÇÀÇ µ¥ÀÌÅ͸¦ °ü¸®ÇÏ´Â ¹ü¿ë Äõ¸® ±â¼úÀÌ´Ù. LINQÀÇ ÀåÁ¡Àº ´ÙÀ½°ú °°´Ù.
l °£°áÇÑ ±¸¹®À¸·Î Äõ¸®
¹æ½ÄÀ» °£¼ÒÈÇÑ´Ù. ²À ÇÊ¿äÇÑ Áö½Ã »çÇ׸¸ ¹àÇô ¿øÇÏ´Â µ¥ÀÌÅ͸¦ °£ÆíÇÏ°Ô ¾òÀ» ¼ö ÀÖ´Ù.
l µ¥ÀÌÅÍ ¼Ò½º¿¡ »ó°ü¾øÀÌ
ÀÏ°üµÈ Äõ¸® ¹®¹ýÀÌ Àû¿ëµÈ´Ù. ÅëÇÕÀ» ÁöÇâÇϸç ÇÑ ¹ø ¹è¿öµÎ¸é ¾îµð¿¡¼³ª ½á ¸ÔÀ» ¼ö ÀÖ´Ù.
l °´Ã¼ÁöÇâÀûÀÌ´Ù. °ü°èÇü µ¥ÀÌÅͺ£À̽º´Â °´Ã¼ÁöÇâ°ú °Å¸®°¡ ¸ÖÁö¸¸ LINQ´Â °´Ã¼ÁöÇâÀÇ
ÀÌÁ¡À» È°¿ëÇÏ¿© »ý»ê¼ºÀÌ ³ô°í ¾ÈÁ¤ÀûÀÌ´Ù.
l °·ÂÇÑ Å¸ÀÔÀ» Áö¿øÇϸç
¸ðµç ¿¡·¯¸¦ ÄÄÆÄÀÏÁß¿¡ Á¡°ËÇÒ ¼ö ÀÖ¾î ½Å¼ÓÇÏ°í ¾ÈÁ¤ÀûÀÌ´Ù. ÀÎÅÚ¸®¼¾½º¿Í µð¹ö°ÅÀÇ ÀüÆøÀûÀÎ µµ¿òÀ» ¹ÞÀ»
¼ö ÀÖ´Ù.
´å³ÝÀº LINQ Áö¿øÀ» À§ÇØ Å¸ÀÔ Ãß·Ð,
À͸í ŸÀÔ, È®Àå ¸Þ¼µå, ¶÷´Ù µîÀÇ ¹®¹ýÀ»
µµÀÔÇß´Ù. °í±Þ ¹®¹ýÀÇ ÀÌÁ¡À» ÃæºÐÈ÷ È°¿ëÇÏ¿© °£°áÇÑ ±¸¹®À¸·Î º¹ÀâÇÑ Äõ¸®¸¦ Áö½ÃÇÒ ¼ö ÀÖ´Ù. ´ë½Å ÇÔÃàÀûÀÌ¸ç ³À̵µ°¡ ³ô¾Æ ±âº» ¹®¹ýÀ» ¼÷ÁöÇØ¾ß Á¦´ë·Î ÀÌÇØÇÒ ¼ö ÀÖ´Ù.
LINQ ÀÚü´Â Àб⸸ ÇÏ¸ç µ¥ÀÌÅ͸¦ º¯°æÇÏ´Â ±â´ÉÀº ¾øÁö¸¸ ÅëÇÕµÈ ¾ð¾îÀÇ
±â´ÉÀ» È°¿ëÇÏ¸é ¼öÁ¤À̳ª ÷»èµµ °¡´ÉÇÏ´Ù. °Ë»öÀº LINQ·Î
ÇÏ°í ¼¶¼¼ÇÑ Á¶ÀÛÀº ¾ð¾î·Î ÇÒ ¼ö ÀÖ¾î »ó»óÇÏ´Â ¸ðµç °ÍÀ» ´Ù ÇÒ ¼ö ÀÖÀ¸¸ç ¾ð¾î³»¿¡¼ ÀÏ°ý 󸮰¡ °¡´ÉÇÏ´Ù.
LINQ´Â È®½ÇÈ÷ »õ·Ó°í ½Å¼±ÇÑ ½ÃµµÀÌ¸ç ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®°¡ ÀÚ¶ûÇÒ¸¸ ÇÏ´Ù. ¼¼»ó¿¡¼ Á¦ÀÏ
ÁÁÀº Äõ¸® ¹æ¹ýÀ¸·Î ±¤°íÇÏÁö¸¸ ¾×¸é ±×´ë·Î ´Ù ¹ÏÀ» ¼ö´Â ¾ø´Ù. ³ÃÁ¤ÇÏ°Ô º¸¸é °úÀåÀÌ ¸¹°í Å»ýÀûÀÎ
ÇÑ°èµµ ÀÖ´Ù.
l ¼¹ö°¡ ºÐ´ãÇÏ´ø ÀÛ¾÷À»
Ŭ¶óÀ̾ðÆ®°¡ ¶° ¸Ã´Â ±¸Á¶ÀûÀÎ °áÇÔÀÌ ÀÖ´Ù. ºÐ»ê ȯ°æÀÇ ÀÌÁ¡ÀÌ »ó¼âµÇ°í Áß¾Ó ÁýÁßÀûÀÎ °ü¸®°¡ ¾î·Æ´Ù.
l ¾ð¾î ÅëÇÕÀº ÇÑ°è°¡
ÀÖ´Ù. ±¸Á¶°¡ ´Ù¸¥ °ü°èÇü DB¿Í XMLÀÇ Äõ¸® ¹æ¹ýÀº ´ç¿¬È÷ ´Ù¸£´Ù. ¾ïÁö·Î ÅëÇÕÇÏ¸é ¼º´ÉÀ» ´ãº¸Çϱâ
¾î·Æ´Ù. ¼ö½Ê³â°£ ÃÖÀûÈÇÑ SQLÀ» ´Ü¼û¿¡ µû¶óÀâ´Â °ÍÀº
ºÒ°¡´ÉÇÏ´Ù.
l ¹è¿ì±â ½±´Ù°í Çϴµ¥
°áÄÚ ½±Áö ¾Ê´Ù. ÇÑ ¹ø ¹è¿ö µÎ¸é È°¿ë ¹üÀ§°¡ ³ÐÁö¸¸ ¹«¾ùÀ̵ç ÇÑ ¹ø Á¦´ë·Î ¹è¿ì±â°¡ ¾î·Æ´Ù.
Àǵµ¿Í ±âȹÀº ÈǸ¢ÇÏ°í ½ÇÁ¦ ±¸ÇöÀ» º¸¸é ÀáÀç·ÂÀÌ »ó´çÇÏ´Ù. ±×·¯³ª °æÀï
»ó´ëµµ °áÄÚ ¸¸¸¸Ä¡ ¾Ê¾Æ °íÀüÀüÀÎ ¹æ¹ýÀ» ¿ÏÀü ´ëüÇÒ Á¤µµ·Î Æı«ÀûÀÌÁö´Â ¾Ê´Ù. °á±¹ LINQ´Â ´ëÅëÇÕÀ» ´Þ¼ºÇϱ⺸´Ù´Â ¼ö¸¹Àº Äõ¸® ¹æ¹ýÁßÀÇ Çϳª°¡ µÉ °ø»êÀÌ Å©´Ù.
LINQ´Â ÅëÇÕÀ» Ç¥¹æÇÏ°í Àִ¸¸Å µ¥ÀÌÅÍ ¼Ò½ºÀÇ ¹üÀ§°¡ ³Ð´Ù. ±×·¸´Ù°í ¾Æ¹« µ¥ÀÌÅͳª ´Ù µÇ´Â °ÍÀº ¾Æ´Ï°í ÃÖ¼ÒÇÑ ¿°Å´Â °¡´ÉÇØ¾ß ÇÑ´Ù.
IEnumerable<T> ¶Ç´Â ÆÄ»ý ÀÎÅÍÆäÀ̽ºÀÎ IQueryable<T>¸¦
Áö¿øÇØ¾ß Çϸç ÀÌ Á¶°ÇÀ» ¸¸Á·ÇØ¾ß Äõ¸® °¡´É ŸÀÔ(Queryable Type)ÀÌ´Ù.
foreach·Î ¼øȸ °¡´ÉÇϸé Äõ¸®µµ °¡´ÉÇÏ´Ù. µ¥ÀÌÅ͸¦ ¼ø¼´ë·Î Àоî¾ß Á¶°Ç¿¡ ¸Â´Â µ¥ÀÌÅ͸¦ ã¾Æ³¾ ¼ö ÀÖÀ¸´Ï ¼øȸ´Â ²À ÇÊ¿äÇÏ´Ù. ¹è¿À̳ª Ä÷º¼ÇÀº ¿°Å °¡´ÉÇØ ¿ä°ÇÀ» ¸¸Á·ÇÑ´Ù. ·¹ÄÚµåÀÇ ÁýÇÕÀÎ
°ü°èÇü DB³ª ¿¤¸®¸ÕÆ®ÀÇ ÁýÇÕÀÎ XMLµµ °°Àº ŸÀÔÀÇ ¿ä¼Ò°¡
¸ðÀÎ ¹è¿ÀÌ¸ç ¼ø¼°¡ ÀÖ¾î ¿°Å °¡´ÉÇÏ´Ù.
°ü°èÇü DB³ª XML ¹®¼´Â
ȯ°æ ¼³Á¤ÀÌ ¹ø°Å·Î¿ö ¸Þ¸ð¸®³»ÀÇ Ä÷º¼ÇÀ» ´ë»óÀ¸·Î LINQ ½Ç½ÀÀ» ÁøÇàÇϱâ·Î ÇÑ´Ù. Ä÷º¼ÇÀ» ´ë»óÀ¸·Î LINQÀÇ ±âº» ¿ø¸®¸¦ ÀÍÈ÷¸é ´Ù¸¥ µ¥ÀÌÅÍ ¼Ò½ºµµ
¶È°°Àº ¹æ¹ýÀ¸·Î ´Ù·ê ¼ö ÀÖ´Ù.
LinqArray |
½ÇÇà°á°ú |
using
System; using
System.Collections.Generic; using
System.Linq; class CSTest
{ static
void Main() { int[]
ar = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; IEnumerable<int>
Query = from n in ar where (n % 3 == 0) select n; foreach
(int k in Query) { Console.WriteLine(k); } } } |
3 6 9 |
LINQ¸¦ »ç¿ëÇÏ·Á¸é µÎ °³ÀÇ
using ¼±¾ðÀÌ ÇÊ¿äÇÏ´Ù. °á°ú¼ÂÀÌ Ä÷º¼ÇÀ̾î¼
using Generic ¼±¾ðÀÌ ÇÊ¿äÇÏ°í using Linq¼±¾ð¿¡ ÀÇÇØ LINQ Áö¿ø È®Àå ¸Þ¼µå°¡ ÀÓÆ÷Æ®µÈ´Ù. ÀÌ ¿¹Á¦´Â Á¤¼ö ¹è¿ ar¿¡¼ 3ÀÇ ¹è¼ö¸¸ ã¾Æ Ãâ·ÂÇÑ´Ù.
´ÙÀ½ ¹®ÀåÀÌ ¹Ù·Î Äõ¸®¹®ÀÌ´Ù.
from n in ar where (n % 3 == 0) select n
SQL¹®°ú Å°¿öµå°¡ ºñ½ÁÇØ Ä£¼÷ÇØ º¸ÀÌÁö¸¸ ¼ø¼³ª ¹®¹ýÀÌ ´Þ¶ó »ý¼ÒÇÏ´Ù. Äõ¸®¹®Àº IEnumerable<T> ŸÀÔÀ» ¸®ÅÏÇϹǷÎ
Äõ¸® º¯¼ö¸¦ ÀÌ Å¸ÀÔÀ¸·Î ¼±¾ðÇÑ´Ù. Á¦³×¸¯ ŸÀÔÀÌ º¹ÀâÇØ º¸ÀÎ´Ù¸é ¾Ï¹¬Àû ŸÀÔÀ¸·Î ¼±¾ðÇÒ ¼ö ÀÖ´Ù.
var Query = from n in ar where (n % 3 == 0) select
n;
foreach (var k in Query)
....
ÄÄÆÄÀÏ·¯°¡ Äõ¸®½ÄÀ¸·ÎºÎÅÍ Å¸ÀÔÀ» Ãß·ÐÇÒ ¼ö ÀÖ¾î Äõ¸® º¯¼ö¿Í foreachÀÇ
Á¦¾î º¯¼ö¸¦ var·Î ¼±¾ðÇÏ¸é µÈ´Ù. º¹ÀâÇÑ Äõ¸®´Â °á°ú¼ÂÀÇ
ŸÀÔÀ» ¿¹ÃøÇϱ⠰ï¶õÇϰųª ±ÍÂú¾ÆÁö´Âµ¥ ÀÌ·² ¶§ ¾Ï¹¬Àû ŸÀÔÀÌ Æí¸®ÇÏ´Ù.
µ¥ÀÌÅÍ ¼Ò½ºÀÇ ÃÖ¼Ò ¿ä°ÇÀÌ ¿°Å °¡´ÉÀ̹ǷΠLINQÀÇ Àû¿ë ºÐ¾ß´Â ±²ÀåÈ÷
³Ð´Ù. ´ÙÀ½ ¿¹Á¦´Â µð½ºÅ©»óÀÇ ÆÄÀÏ ¸ñ·ÏÀ» LINQ Äõ¸®¹®À¸·Î
Á¶»çÇÏ¿© Ãâ·ÂÇÑ´Ù. ÆÄÀÏ ¸ñ·Ïµµ µð½ºÅ©¿¡ ¼ø¼´ë·Î µé¾î ÀÖ´Â ¹è¿À̹ǷΠµ¥ÀÌÅÍ ¼Ò½º·Î¼ ¼Õ»öÀÌ ¾ø´Ù.
LinqFile |
using
System; using
System.Collections.Generic; using
System.Linq; using
System.IO; class CSTest
{ static
void Main() { var
Files = from f in Directory.GetFiles("c:\\") select f; foreach
(var f in Files) { Console.WriteLine("À̸§ : " + f); } } } |
Directory.GetFiles ¸Þ¼µå·Î ·çÆ® µð·ºÅ͸®ÀÇ ÆÄÀÏ ¸ñ·ÏÀ»
±¸ÇØ Ãâ·ÂÇß´Ù. Á¶°ÇÀ» ÁöÁ¤Çϰųª Ãâ·Â ¼ø¼¸¦ º¯°æÇÒ ¼ö ÀÖ°í ´õ º¹ÀâÇÑ Ã³¸®µµ ¾ó¸¶µçÁö °¡´ÉÇÏ´Ù.
l Á¶°Ç¿¡ ¸Â´Â Æú´õÀÇ
ÃÑ Å©±â ±¸Çϱâ
l µÎ Æú´õÀÇ ÆÄÀÏ ³»¿ëÀ»
ºñ±³ÇÏ¿© º¸°í¼ Ãâ·ÂÇϱâ
l ¼ºê µð·ºÅ͸®¸¦ µÚÁ®
Áߺ¹µÈ ÆÄÀÏ Ã£±â
ÀÌ·± °ÍÀÌ °¡´ÉÇÑ ÀÌÀ¯´Â Äõ¸®°¡ ¾ð¾î¿¡ ÅëÇյǾî ÀÖ¾î Äõ¸®¹®³»¿¡¼
GetFiles, GetFileLength µîÀÇ ¸Þ¼µå¸¦ ÀÚÀ¯·Ó°Ô È£ÃâÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù. ¾ð¾îÀÇ
¸ðµç ±â´ÉÀ» ´Ù ±¸»çÇÒ ¼ö ÀÖ¾î È°¿ë¼ºÀÌ ¹«±Ã ¹«ÁøÇÏ´Ù.
C#Àº LINQ¸¦ Áö¿øÇϱâ
À§ÇØ ¹®¹ýÀÇ ¸¹Àº ºÎºÐÀ» È®ÀåÇߴµ¥ °¡Àå Á÷Á¢ÀûÀÎ È®ÀåÀº Äõ¸® Ç¥Çö½ÄÀÌ´Ù. Äõ¸® Ç¥Çö½ÄÀº ±¸ÇÏ°íÀÚ ÇÏ´Â
µ¥ÀÌÅÍ¿Í Ãâ·Â ¹æ½ÄÀ» ÇÔÃàÀûÀ¸·Î ¼³¸íÇÏ´Â ÀÏÁ¾ÀÇ ½ºÅ©¸³Æ®ÀÌ´Ù. ¿©·¯ °³ÀÇ Àý·Î ±¸¼ºµÇ¸ç ±¸Á¶´Â ´ÙÀ½°ú
°°´Ù.
fromÀ¸·Î ½ÃÀÛÇؼ select³ª groupÀ¸·Î ³¡³ª¸ç ³ª¸ÓÁö´Â ÇÊ¿äÇÒ ¶§¸¸ »ç¿ëÇÏ´Â ¿É¼ÇÀÌ´Ù. °¡Àå
°£´ÜÇÑ ÇüÅÂÀÎ from ... select ... ´Â Á¶°Ç¾øÀÌ ¸ðµç µ¥ÀÌÅ͸¦ Àд´Ù. ´ÙÀ½ ¿¹Á¦´Â µ¥ÀÌÅÍ ¼Ò½º·Î »ç¿ëÇÒ °´Ã¼ÀÇ ¹è¿À» Á¤ÀÇÇÑ´Ù. ÀÌÈÄÀÇ
½Ç½À¿¡µµ °è¼Ó »ç¿ëÇϹǷΠ¸ð¾çÀ» Àß ºÁ µÎÀÚ.
LinqPeople |
|
using
System; using
System.Collections.Generic; using
System.Linq; class People
{ public
People(string aName, int aAge, bool aMale) { Name = aName; Age = aAge; Male =
aMale; } public
string Name; public
int Age; public
bool Male; } class CSTest
{ static
void Main() { People[]
arPeople = { new People("Á¤¿ì¼º", 36, true),
new People("°í¼Ò¿µ", 32, false)
,new People("¹è¿ëÁØ", 37, true), new
People("±èÅÂÈñ", 29, false) }; IEnumerable<People>
Query = from p in arPeople select p; foreach
(People k in Query) { Console.WriteLine("À̸§ : " + k.Name + ", ³ªÀÌ : " +
k.Age + ",
³²ÀÚ : " + k.Male); } } } |
|
½ÇÇà°á°ú |
À̸§ : Á¤¿ì¼º, ³ªÀÌ : 36, ³²ÀÚ :
True À̸§ : °í¼Ò¿µ, ³ªÀÌ : 32, ³²ÀÚ :
False À̸§ : ¹è¿ëÁØ, ³ªÀÌ : 37, ³²ÀÚ :
True À̸§ : ±èÅÂÈñ, ³ªÀÌ : 29, ³²ÀÚ :
False |
½Å»ó Á¤º¸¸¦ ÀúÀåÇÏ´Â People Ŭ·¡½º¸¦ ¼±¾ðÇÏ°í 4¸í¿¡ ´ëÇÑ ½Å»ó Á¤º¸¸¦ arPeople ¹è¿·Î Á¤ÀÇÇß´Ù. ÀÌ ¹è¿À» Äõ¸®ÇÏ¿© Àüü ·¹Äڵ带 Ãâ·ÂÇߴµ¥ ÀÌ ¿¹Á¦ÀÇ Äõ¸®¹®À» ´Ù¾çÇÏ°Ô º¯ÇüÇØ º¸¸é¼ ½Ç½ÀÀ» ÁøÇàÇØ º¸ÀÚ.
fromÀýÀº µ¥ÀÌÅÍ ¼Ò½º¸¦ ÁöÁ¤ÇÑ´Ù. ¸ðµç
º¯¼ö´Â »ç¿ëÇϱâ Àü¿¡ ¸ÕÀú ¼±¾ðÇØ¾ß ÇϹǷΠfromÀýÀÌ Á¦ÀÏ ¸ÕÀú ¿Â´Ù. ´ë»óÀ» ¸ÕÀú ¹àÇô¾ß ÀÌÈÄÀÇ Á¶°ÇÀýÀ̳ª Ãâ·ÂÀý¿¡¼ ÂüÁ¶ÇÒ ¼ö ÀÖÀ¸¸ç ÀÎÅÚ¸®¼¾½ºÀÇ µµ¿òµµ ¹ÞÀ» ¼ö ÀÖ´Ù. fromÀýÀÇ Çü½ÄÀº ´ÙÀ½°ú °°´Ù.
from ¼øȸº¯¼ö in µ¥ÀÌÅͼҽº
from Å°¿öµå ´ÙÀ½ÀÇ ¼øȸ º¯¼ö(Iteration
Variable)´Â ¼Ò½ºÀÇ ¿ä¼Ò¸¦ ¼ø¼´ë·Î Àд´Ù. from p in arPeopleÀº arPeople ¹è¿ÀÇ °¢ ¿ä¼Ò¸¦ p·Î ĪÇÑ´Ù´Â ¶æÀ̸ç ÀÌÈÄ p¸¦ »ç¿ëÇÏ¿© Ãâ·Â Á¶°ÇÀ̳ª ¼ø¼, ´ë»ó µîÀ» ÁöÁ¤ÇÑ´Ù.
¼øȸ º¯¼öÀÇ Å¸ÀÔÀº µ¥ÀÌÅÍ ¼Ò½º·ÎºÎÅÍ Ãß·Ð °¡´ÉÇØ ±»ÀÌ ¹àÈ÷Áö ¾Ê¾Æµµ µÈ´Ù. in
arPeopleÀ̶ó°í ÇßÀ¸´Ï ¼øȸ º¯¼ö p´Â ¹è¿ÀÇ ¿ä¼ÒÀÎ People ŸÀÔÀÓÀÌ ÀÚ¸íÇÏ´Ù. ±×·¯³ª ArrayList °°Àº ºñÁ¦³×¸¯ Ä÷º¼ÇÀº ¿ä¼ÒÀÇ Å¸ÀÔÀÌ ¸íÈ®ÇÏÁö ¾Ê¾Æ ¼øȸ º¯¼öÀÇ Å¸ÀÔÀ» ¹àÇô¾ß ÇÑ´Ù. ´ÙÀ½Àº LinqArray ¿¹Á¦ÀÇ ºñÁ¦³×¸¯ ¹öÀüÀÌ´Ù.
LinqArrayList |
using
System; using
System.Collections; using
System.Collections.Generic; using
System.Linq; class CSTest
{ static
void Main() { ArrayList
ar = new ArrayList { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; IEnumerable<int>
Query = from int n in ar where (n % 3 == 0) select n; foreach
(int k in Query) { Console.WriteLine(k); } } } |
ArrayList´Â ¿ÀºêÁ§Æ®ÀÇ ¹è¿ÀÌ¸ç ¿ä¼ÒÀÇ Å¸ÀÔÀº ¸ðµÎ objectÀÌ´Ù. ÀÓÀÇÀÇ Å¸ÀÔÀ» ÀúÀåÇÏ´Ù º¸´Ï ÄÄÆÄÀÏ·¯°¡ arÀÇ ¿ä¼Ò ŸÀÔÀ» Ãß·ÐÇÒ ¼ö ¾ø´Ù. ±×·¡¼ from n in ar À̶ó°í ¾²¸é ¾ÈµÇ°í nÀÇ Å¸ÀÔÀ» ¹àÇô from int n in ar À̶ó°í ½á¾ß ÇÑ´Ù. select ÀýÀº
¾î¶² °ªÀ» ¾î¶»°Ô Ãâ·ÂÇÒ °ÍÀÎÁö ÁöÁ¤ÇÑ´Ù. ¼øȸ º¯¼ö¸¦ selectÀý¿¡
ÀûÀ¸¸é º¯È¯¾øÀÌ ±×´ë·Î Ãâ·ÂÇ϶ó´Â ¶æÀÌ´Ù. LinqArray ¿¹Á¦´Â ¼øȸ º¯¼ö nÀ» Àû¾î 3ÀÇ ¹è¼öÀÎ 3, 6,
9°¡ Ãâ·ÂµÈ´Ù. selectÀýÀ» ´ÙÀ½°ú °°ÀÌ ¹Ù²ã º¸ÀÚ.
from n in ar where (n % 3 == 0) select n * 2;
¼øȸ º¯¼ö n¿¡ 2¸¦ °öÇϸé 6, 12, 18ÀÌ Ãâ·ÂµÈ´Ù. LinqPeople ¿¹Á¦¿¡¼µµ ¼øȸ
º¯¼ö p¸¦ ±×´ë·Î Ãâ·ÂÇߴµ¥ ÀϺΠ¸â¹ö¸¸ Ãâ·ÂÇϰųª °¡°øÇÏ¿© Ãâ·ÂÇÒ ¼ö ÀÖ´Ù.
C#°ú ºñÁÖ¾ó º£ÀÌÁ÷Àº LINQ¸¦
Áö¿øÇϱâ À§ÇØ Äõ¸® Ç¥Çö½ÄÀ» Ãß°¡Çߴµ¥ ÁúÀÇ ¾ð¾îÀÌ´Ù º¸´Ï ±âÁ¸ ±¸¹®°ú´Â ÀÌÁúÀûÀÌ´Ù. ºÒÇàÈ÷µµ Äõ¸®
Ç¥Çö½ÄÀº ¾ð¾îÀÇ ±â´ÉÀÏ »Ó ´å³ÝÀÇ ±â´ÉÀº ¾Æ´Ï¾î¼ CLRÀÌ ÀνÄÇÏÁö ¸øÇÑ´Ù.
Äõ¸® Ç¥Çö½ÄÀº CLRÀÌ ½ÇÇàÇÒ ¼ö ÀÖ´Â ¸Þ¼µå È£Ãâ·Î º¯È¯ÇÏ¿© ½ÇÇàÇÑ´Ù. Äڵ带 ½ÇÇàÇÏ´Â ÁÖü°¡ ¸Þ¼µåÀÌ´Ï ±×·² ¼ö¹Û¿¡ ¾ø´Ù. Äõ¸® ±¸ÇöÀ»
À§ÇÑ ¸Þ¼µå¸¦ Ç¥ÁØ Äõ¸® ó¸®ÀÚ(Standard Query Operators)¶ó°í Çϴµ¥ Äõ¸® Ç¥Çö½Ä
´ë½Å ¸Þ¼µå¸¦ ¹Ù·Î È£ÃâÇصµ µÈ´Ù.
±×·¯³ª ¸Þ¼µå´Â ½ºÅ©¸³Æ®¿Í ´Þ¸® ÀåȲÇÏ°í µüµüÇØ Äõ¸® ¿ëµµ·Î ÀûÇÕÇÏÁö ¾Ê´Ù. °¡±ÞÀûÀ̸é
Äõ¸® Ç¥Çö½ÄÀ» ¾²µÇ Äõ¸® Ç¥Çö½ÄÀÌ Ã³¸®ÇÏÁö ¸øÇÏ´Â µ¿ÀÛ¿¡ ´ëÇؼ¸¸ ¸Þ¼µå¸¦ Á÷Á¢ È£ÃâÇÏ¸é µÈ´Ù. Äõ¸®
Ç¥Çö½ÄÀÇ ³»ºÎ µ¿ÀÛÀ» ÀÌÇØÇÏ°í °í±Þ Äõ¸®¸¦ ½ÇÇàÇϱâ À§ÇØ Ç¥ÁØ Äõ¸® ó¸®ÀÚ¸¦ ¿¬±¸ÇØ º¸ÀÚ.
from n in ar where (n % 3 == 0) select n
ÀÌ Äõ¸®¹®Àº ÄÄÆÄÀÏ·¯¿¡ ÀÇÇØ ´ÙÀ½ ¸Þ¼µå È£Ãâ¹®À¸·Î ¹ø¿ªµÈ´Ù. ÇüŸ¸
´Ù¸¦ »Ó ¼º´É Â÷ÀÌ´Â ¾øÀ¸¸ç ¿¹Á¦ÀÇ Äõ¸®¹®À» ¸Þ¼µå È£Ãâ·Î ¹Ù²Ù¾îµµ Àß µ¿ÀÛÇÑ´Ù.
ar.Where(x => x % 3 == 0)
ÀÌ ¹®ÀåÀ» Áö¿øÇϱâ À§ÇØ µÎ °¡Áö È®Àå ¹®¹ýÀÌ µµÀԵǾú´Ù. ¸ÕÀú Where ¸Þ¼µåÀÇ Á¤Ã¼¸¦ ¾Ë¾Æº¸ÀÚ. À̸§À¸·Î À¯ÃßÇØ º¸¸é Á¶°Ç ÁöÁ¤¹®ÀÓÀº
ÁüÀ۵Ǵµ¥ ÀÌ ¸Þ¼µåÀÇ ¼Ò¼ÓÀº °ú¿¬ ¾îµðÀϱî? ar. ±îÁö¸¸ ÀÔ·ÂÇØ º¸¸é ÀÎÅÚ¸®¼¾½ºÃ¢À» ÅëÇØ Where ¿Ü¿¡µµ Count, Sum, Max ¸Þ¼µå°¡ ´õ ÀÖÀ½À»
¾Ë ¼ö ÀÖ´Ù.
¹è¿¿¡ ÀÌ ¸¹Àº ¸Þ¼µå¸¦ ÀÏÀÏÀÌ Ãß°¡ÇßÀ» ¸®´Â ¾ø´Ù. ÀÌ ¸Þ¼µå´Â ¿ÜºÎ¿¡
Á¤ÀÇµÈ È®Àå ¸Þ¼µåÀÌµÇ ¸¶Ä¡ ÀνºÅϽº ¸Þ¼µåÀÎ °Íó·³ È£ÃâÇÒ ¼ö ÀÖ´Ù. È®Àå ¸Þ¼µå°¡ ¾ø´Ù¸é ÇÊ¿äÇÑ
¸Þ¼µå¸¦ ÀÏÀÏÀÌ Ãß°¡Çϰųª ¾Æ´Ï¸é ¿ÜºÎ¿¡ Á¤ÀÇÇØ ³õ°í ´ÙÀ½°ú °°ÀÌ È£ÃâÇØ¾ß ÇÑ´Ù.
Where(ar, x => x % 3 == 0);
°´Ã¼ ¼Ò¼ÓÀÌ ¾Æ´Ï´Ï °´Ã¼·ÎºÎÅÍ È£ÃâÇÒ ¼ö ¾ø°í °´Ã¼¸¦ Àμö·Î ³Ñ°Ü¾ß ÇÑ´Ù. ÇÏÁö¸¸
È®Àå ¸Þ¼µå´Â °´Ã¼ÀÇ ¸Þ¼µåó·³ È£ÃâÇÒ ¼ö ÀÖ¾î Á÷°üÀûÀÌ´Ù. Where ¸Þ¼µåÀÇ ¿øÇüÀº ´ÙÀ½°ú °°´Ù.
public static IEnumerable<T> Where<T>
(
IEnumerable<T>
source,
Func<T,
bool> predicate
)
ù ¹ø° Àμö´Â Á¶°Ç Á¡°ËÀ» ÇÒ µ¥ÀÌÅÍ ¼Ò½ºÀÌ¸ç °á±¹ È£Ãâ °´Ã¼°¡ µÇ´Â ¼ÀÀÌ´Ù. µÎ
¹ø° Àμö´Â Á¶°Ç Á¡°ËÀ» ÇÒ ¸Þ¼µåÀ̸ç T ŸÀÔÀÇ Àμö¸¦ Çϳª ¹Þ¾Æ
TResult ŸÀÔÀ» ¸®ÅÏÇÏ´Â Func µ¨¸®°ÔÀÌÆ® ŸÀÔÀÌ´Ù.
public delegate TResult Func<T, TResult> (T
arg)
Where´Â T ŸÀÔÀÇ ¹è¿
¿ä¼Ò¸¦ ¹Þ¾Æ Func ¸Þ¼µå·Î Àü´ÞÇÏ¿© Á¶°Ç¿¡ ¸Â´Â ¿ä¼Ò¸¸ ¼±º°ÇÑ´Ù.
WhereOp |
using
System; using
System.Collections.Generic; using
System.Linq; class CSTest
{ static
bool Is3Times(int x) { return
x % 3 == 0; } static
void Main() { int[]
ar = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; var
Query = ar.Where(Is3Times); foreach
(var k in Query) { Console.WriteLine(k); } } } |
Is3Times´Â Á¤¼ö°¡ 3ÀÇ
¹è¼öÀÎÁö Á¶»çÇÑ´Ù. ¿øÇüÀÌ Func µ¨¸®°ÔÀÌÆ® ŸÀÔ°ú °°¾Æ WhereÀÇ µÎ ¹ø° Àμö·Î Àü´ÞÇÒ ¼ö ÀÖ´Ù. Äõ¸®°¡ ½ÇÇàµÉ ¶§ Where´Â arÀÇ °¢ ¿ä¼Ò¿¡ ´ëÇØ
Is3Times¸¦ È£ÃâÇÏ°í true¸¦ ¸®ÅÏÇÏ´Â ¿ä¼Ò¸¸ °á°ú¼ÂÀ¸·Î Ãâ·ÂÇÑ´Ù. ÄÚµå´Â ¿Ïº®ÇÏÁö¸¸ Äõ¸®¹®À¸·Î´Â »§Á¡ÀÌ´Ù. ¸Þ¼µå¸¦ ¹Ì¸® ÁغñÇÏ´Â
¿¹ºñ µ¿ÀÛÀÌ ÇÊ¿äÇØ °£°á¼º°ú´Â °Å¸®°¡ ¸Ö´Ù. Äõ¸®´Â ±æ¾î¼´Â ¾ÈµÇ¸ç ¾î¶±Çϵç ÇÑÁÙ¿¡ ±¸°Ü ³Ö¾î¾ß ÇÑ´Ù. ÀÌ·± ¿ëµµ·Î ÀÍ¸í ¸Þ¼µå¸¦ ´ë½Å »ç¿ëÇÒ ¼ö ÀÖ´Ù.
var Query = ar.Where(delegate(int x) { return x %
3 == 0; });
x¸¦ Àμö·Î ¹Þ¾Æ 3ÀÇ ¹è¼öÀÎÁö
Á¶»çÇÏ´Â ÀÍ¸í ¸Þ¼µå¸¦ Àü´ÞÇÑ´Ù. ¸Þ¼µåº¸´Ù´Â ÈξÀ ³´Áö¸¸ ¾ÆÁ÷µµ ½ºÅ©¸³Æ®¶ó°í º¸±â¿¡´Â ±æ°í ºÒÆíÇÏ´Ù. ±×·¡¼ ´õ ª°í ¸í·áÇÏ°Ô Äڵ带 ÀÛ¼ºÇÏ´Â ¶÷´Ù Ç¥Çö½ÄÀ» »õ·Î ¸¸µé¾ú´Ù.
var Query = ar.Where(x => x % 3 == 0);
¶÷´Ù´Â x¸¦ ¹Þ¾Æ 3ÀÇ ¹è¼öÀÎÁö
Á¡°ËÇÑ´Ù. ²À ÇÊ¿äÇÑ ÇÙ½É Äڵ常 ¹àÈ÷¸é µÇ´Ï ª°í °£°áÇØ ½ºÅ©¸³Æ®·Î Á¦°ÝÀÌ´Ù. Å°º¸µå ¸î ¹ø ´ú Ãĵµ µÇ´Â Á¤µµÀÇ Â÷ÀÌ°¡ ¾Æ´Ï¶ó »ç°í°¡ ´Ü¼øÇØÁö°í ¹®Á¦¸¦ Ǫ´Â ¹æ½Ä¿¡ ÁýÁßÇÒ ¼ö ÀÖ¾î »ý»ê¼ºÀÌ
Çâ»óµÈ´Ù. ¿Ö ¿Â°® ¿ä»óÇÑ ¹®¹ýÀ» µ¿¿øÇØ°¡¸ç Äڵ带 ¾ÐÃàÇÏ·Á°í ¹ß¹öµÕÀ» ÃÆ´ÂÁö ¾î·ÅDzÀ̳ª¸¶ ÀÌÇØµÉ °ÍÀÌ´Ù. Where ¸Þ¼µå À§ÁÖ·Î ¿¬±¸ÇØ ºÃ´Âµ¥ ´Ù¸¥ Ç¥ÁØ Äõ¸® ó¸®ÀÚµµ ºñ½ÁÇÑ ¹æ½ÄÀ¸·Î Àû¿ëµÈ´Ù. ´ÙÀ½Àº ÁÖ¿ä Ç¥ÁØ Äõ¸® ó¸®ÀÚ ¸ñ·ÏÀÌ´Ù.
¸Þ¼µå |
¼³¸í |
Count |
°³¼ö¸¦ ±¸ÇÑ´Ù. |
Sum |
Çհ踦 ±¸ÇÑ´Ù. |
Average |
Æò±ÕÀ» ±¸ÇÑ´Ù. |
Max |
ÃÖ´ë°ªÀ» ±¸ÇÑ´Ù. |
Min |
ÃÖ¼Ò°ªÀ» ±¸ÇÑ´Ù. |
OrderBy |
¿ä¼ÒµéÀ» Á¤·ÄÇÑ´Ù. |
Select |
°á°ú¼ÂÀÇ ÇÁ·ÎÁ§¼ÇÀ» »ý¼ºÇÑ´Ù. |
Distinct |
Áߺ¹À» Á¦°ÅÇÑ´Ù. |
Except |
Â÷ÁýÇÕÀ» ±¸ÇÑ´Ù. |
Intersect |
±³ÁýÇÕÀ» ±¸ÇÑ´Ù. |
Union |
ÇÕÁýÇÕÀ» ±¸ÇÑ´Ù. |
All |
¸ðµç ¿ä¼Ò°¡ Á¶°ÇÀ» ¸¸Á·ÇÏ´ÂÁö Á¶»çÇÑ´Ù. |
Any |
ÇϳªÀÇ ¿ä¼Ò¶óµµ Á¶°ÇÀ» ¸¸Á·ÇÏ´ÂÁö Á¶»çÇÑ´Ù. |
Contains |
ÁöÁ¤ÇÑ ¿ä¼Ò°¡ Æ÷ÇԵǾî ÀÖ´ÂÁö Á¶»çÇÑ´Ù. |
Take |
ÁöÁ¤ÇÑ À§Ä¡¿¡¼ Ä÷º¼ÇÀ» ºÐÇÒÇÑ´Ù. |
First |
Ä÷º¼ÇÀÇ Ã¹ ¹ø° ¿ä¼Ò¸¦ ±¸ÇÑ´Ù. |
Last |
Ä÷º¼ÇÀÇ ¸¶Áö¸· ¿ä¼Ò¸¦ ±¸ÇÑ´Ù. |
ElementAt |
ÁöÁ¤ÇÑ Ã·ÀÚÀÇ ¿ä¼Ò¸¦ ±¸ÇÑ´Ù. |
LinqArray ¿¹Á¦ÀÇ ar ¹è¿¿¡¼ 3ÀÇ ¹è¼ö°¡ ¸î °³³ª µÇ´ÂÁö ¾Ë°í ½Í´Ù¸é °á°ú¼Â¿¡ ´ëÇØ Count ¸Þ¼µå¸¦
È£ÃâÇÑ´Ù.
var Query = from n in ar where (n % 3 == 0) select
n;
int count = Query.Count();
Console.WriteLine(count);
°á°ú¼ÂÀº ÇÊ¿ä ¾ø°í °³¼ö¸¸ ¾Ë°í ½Í´Ù¸é ´õ °£´ÜÇÏ°Ô Ç¥Çö½Ä ÀÚü¸¦ °ýÈ£·Î ¹°í
Count¸¦ È£ÃâÇÑ´Ù.
int count = (from n in ar where (n % 3 == 0)
select n).Count();
À̰͵µ ±æ´Ù¸é º¯¼ö·Î ´ëÀÔ¹ÞÀ» ÇÊ¿ä ¾øÀÌ CountÀÇ °á°ú¸¦ ¹Ù·Î Ãâ·ÂÇØ
¹ö¸°´Ù.
Console.WriteLine((from n in ar where (n % 3 == 0)
select n).Count());
Á¡Á¡ ´õ ª¾ÆÁö´Âµ¥ ÀÌ·± °Ô Äõ¸®ÀÇ ¹¦¹ÌÀÌ´Ù. ´ÙÀ½ ¿¹Á¦´Â Except ó¸®ÀÚ¸¦ È°¿ëÇÏ¿© µÎ ¸ñ·ÏÀÇ Â÷ÁýÇÕÀ» ±¸ÇÑ´Ù.
Except |
|
using
System; using
System.Collections.Generic; using
System.Linq; class CSTest
{ static
void Main() { var
My = new List<string> { "¸Ç¹ßÀÇ ±âºÀÀÌ",
"¶Ò¹æÀü¼³", "µð¿ö",
"¸¶Æĵµ2", "Ÿ¥"
}; var
Your = new List<string> { "¶Ò¹æÀü¼³",
"¿ÕÀÇ ³²ÀÚ", "Áßõ",
"µð¿ö", "¶óµð¿À ½ºÅ¸"
}; var
Query = (from y in Your select y).Except(from m in My select m); foreach
(var s in Query) { Console.WriteLine(s); } } } |
|
½ÇÇà°á°ú |
¿ÕÀÇ ³²ÀÚ Áßõ ¶óµð¿À ½ºÅ¸ |
My°¡ ³ªÀÇ ¿µÈ ¸ñ·ÏÀÌ°í Your°¡
Ä£±¸ÀÇ ¿µÈ ¸ñ·ÏÀÌ´Ù. ³»°Ô ¾ø´Â ¿µÈ¸¦ Á¶»çÇÏ·Á¸é Â÷ÁýÇÕÀ» ±¸ÇØ¾ß Çϴµ¥ ÀÌ·² ¶§ µÎ °³ÀÇ Äõ¸®½ÄÀ¸·Î
°¢ÀÚÀÇ ¿µÈ ¸ñ·ÏÀ» ±¸ÇÑ ÈÄ Except ¸Þ¼µå¸¦ È£ÃâÇÑ´Ù. ¸ñ·ÏÀ»
¹Ù²Ù¸é Ä£±¸¿¡°Ô ÁÙ ¿µÈ ¸ñ·ÏÀÌ ±¸ÇØÁø´Ù.
var Query = (from y in My select y).Except(from m
in Your select m);
¸ñ·ÏÀÌ Âª¾Æ À°¾ÈÀ¸·Îµµ Â÷ÁýÇÕÀ» ±¸ÇÒ ¼ö ÀÖÁö¸¸ ¼ö õ°³ÀÇ MP3 ÆÄÀÏÀ̰ųª
À̸§ÀÌ ¿ä»óÇÏ°Ô ºÙ¿©Áø µ¿¿µ»óÀ̶ó¸é À°¾È °Ë»öÀº ¾î·Æ´Ù. ÀÌ·² ¶§ Äõ¸®¸¦ ½ÇÇàÇϸé Â÷ÁýÇÕÀ» ½±°í Á¤È®ÇÏ°Ô
±¸ÇÒ ¼ö ÀÖ´Ù.
»Ó¸¸ ¾Æ´Ï¶ó ¸ñ·ÏÀ» ¼øȸÇÏ¸é¼ ÆÄÀÏÀ» ó¸®ÇÏ´Â Äڵ带 ÀÛ¼ºÇÏ¿© Äõ¸® °á°ú¸¦ Áï¼®¿¡¼ ó¸®ÇÒ ¼ö ÀÖ´Ù. Ä£±¸¸¸ °¡Áö°í ÀÖ´Â ¿µÈ¸¦ °ñ¶ó º¹»çÇÒ ¼ö ÀÖ°í ¼·Î ±³È¯µµ °¡´ÉÇÏ´Ù. ¾ð¾î
ÅëÇÕÀÇ ÀÌÁ¡À̶ó°í ÇÒ ¼ö ÀÖ´Ù.
Äõ¸®´Â ´ÜÀÏ°ªÀ» ±¸ÇÏ´Â °£´ÜÇÑ Áú¹®ÀÎ °æ¿ìµµ ÀÖÁö¸¸ ¶§·Î´Â °Å´ëÇÑ µ¥ÀÌÅÍ ÁýÇÕÀ» ¿ä±¸ÇÒ ¼öµµ ÀÖ´Ù. Áú¹® ³»¿ë¿¡ µû¶ó »ó´çÇÑ ½Ã°£ÀÌ °É¸± ¼ö ÀÖ¾î LINQ´Â Äõ¸®¸¦
Áï½Ã ½ÇÇàÇÏÁö ¾Ê°í ´ÙÀ½ 3´Ü°è¸¦ °ÅÃÄ °èȹÀ» § ÈÄ ½ÇÇàÇÑ´Ù.
l ¿øÇÏ´Â µ¥ÀÌÅÍ°¡ ÀúÀåµÈ
µ¥ÀÌÅÍ ¼Ò½º¸¦ ÁغñÇÑ´Ù. ¹è¿Àº °£´ÜÇÏÁö¸¸ µ¥ÀÌÅͺ£À̽º³ª XML ¹®¼´Â
º¹ÀâÇÑ °úÁ¤À» ÅëÇØ ¿¬°á ¶Ç´Â ÆĽÌÇØ µÎ¾î¾ß ÇÑ´Ù.
l Áú¹® ³»¿ë¿¡ ÇØ´çÇÏ´Â
Äõ¸®¸¦ »ý¼ºÇÑ´Ù. Á¶°Ç¿¡ ¸Â´Â µ¥ÀÌÅ͸¦ °¡Á®¿À´Â ¸í·É¹®À» ÀÛ¼ºÇÏ¿© ½ÇÇàÀ» ÁغñÇÑ´Ù.
l »ý¼ºµÈ Äõ¸®¸¦ ½ÇÇàÇÑ´Ù. foreach ¹®À̳ª ±âŸ À¯»çÇÑ ¹Ýº¹¹®À¸·Î °á°ú¼ÂÀ» ¼øȸÇÏ¸ç µ¥ÀÌÅ͸¦ ²¨³» »ç¿ëÇÑ´Ù.
¿©±â¼ ÇÙ½ÉÀº Äõ¸®¸¦ »ý¼ºÇÏ´Â °Í°ú ½ÇÇàÇÏ´Â °ÍÀº º°°³¶ó´Â °ÍÀÌ´Ù. Äû¸®¸¦
¸¸µç´Ù°í Çؼ °á°ú¼ÂÀÌ °ð¹Ù·Î ±¸ÇØÁö´Â °ÍÀº ¾Æ´Ï´Ù. Áغñ¸¸ ÇØ µÎ¾ú´Ù°¡ °á°ú¼ÂÀ» ÀÐÀ» ¶§ ½ÇÁ¦ µ¥ÀÌÅ͸¦
Àд´Ù. À̸¦ Áö¿¬µÈ ½ÇÇà(Deferred Execution)À̶ó°í
ÇÑ´Ù.
DeferredExec |
|
using
System; using
System.Collections.Generic; using
System.Linq; class CSTest
{ static
void Main() { int[]
ar = { 1, 2, 3, 4, 5 }; var
Query = from n in ar select n; foreach
(int k in Query) { Console.Write(k
+ ","); } Console.WriteLine(); ar[2]
= 9999; foreach
(int k in Query) { Console.Write(k
+ ","); } Console.WriteLine(); } } |
|
½ÇÇà°á°ú |
1,2,3,4,5, 1,2,9999,4,5, |
Á¤¼öÇü ¹è¿À» ¼±¾ðÇÏ°í Äõ¸®·Î Àоú´Ù. QueryÀÇ ÁúÀÇ ³»¿ëÀº ar ¹è¿ÀÇ Á¤¼ö nÀ» ¼ø¼´ë·Î ÀÐ¾î °á°ú¼ÂÀ» ¸¸µå´Â °£´ÜÇÑ °ÍÀÌ´Ù. Äõ¸® º¯¼ö´Â ÇÑ ¹ø¸¸ Á¤ÀÇÇÏ°í ½ÇÇàÀº µÎ ¹ø Ç쵂 Áß°£¿¡ ar[2]¸¦ 9999·Î º¯°æÇÏ¿´´Ù. óÀ½ ¼øȸÇÒ ¶§´Â ¹è¿¿¡ ÀÖ´Â °ªÀÌ ±×´ë·Î
Ãâ·ÂµÈ´Ù. µÎ ¹ø°´Â ¶È°°Àº Query º¯¼ö·Î ¼øȸÇßÁö¸¸
¼öÁ¤µÈ °ªÀÌ Ãâ·ÂµÈ´Ù. °á°ú¸¦ º¸¸é Äõ¸®¸¦ »ý¼ºÇÏ´Â ½ÃÁ¡ÀÌ ¾Æ´Ñ ¼øȸÇÒ ¶§ °á°ú¼ÂÀ» ¸¸µç´Ù´Â °ÍÀ» ¾Ë
¼ö ÀÖ´Ù.
Query º¯¼ö¿¡´Â °á°ú¼Â ÀÚü°¡ ¾Æ´Ñ °á°ú¼ÂÀ» ¾ò±â À§ÇÑ Áú¹®¸¸ ÀÖÀ¸¸ç
µ¥ÀÌÅÍ ¼Ò½º°¡ ¼öÁ¤µÇ¸é º¯°æµÈ °ªÀÌ ÀÐÇôÁø´Ù. Äõ¸®¸¦ ½ÇÇàÇÒ ¶§¸¶´Ù ´Ù¸¥ °á°ú°¡ ¸®ÅϵǴµ¥ À̸¦ ÇöÀ缺À̶ó°í
ÇÑ´Ù. ¼øȸ ½ÃÁ¡ÀÇ °ªÀ» ½Ç½Ã°£À¸·Î Á¶»çÇÏ´Â °ÍÀÌ´Ù. ¿©·¯
¸íÀÌ µ¿½Ã¿¡ Á¢¼ÓÇϴ ȯ°æ¿¡¼´Â ÇöÀ缺ÀÌ Áß¿äÇÏ´Ù.
Áö¿¬µÈ ½ÇÇàÀº ¼º´É Çâ»ó¿¡µµ À¯¸®ÇÏ´Ù. °á°ú¼ÂÀÌ 100¸¸°³¶óµµ Äõ¸® »ý¼º ½ÃÁ¡¿¡ ÀÏ°ý Á¶»çÇÒ ÇÊ¿ä ¾ø°í ±×¸¸ÇÑ ¸Þ¸ð¸®¸¦ È®º¸ÇÏ´Â °Íµµ ¾î·Æ´Ù. 100¸¸ °³°¡ µ¿½Ã¿¡ ´Ù ÇÊ¿äÇÑÁö ¾ÕÂÊ ¸î °³¸¸ ÇÊ¿äÇÑÁöµµ Á¤È®È÷ ¾Ë ¼ö ¾ø´Ù. Áö¿¬µÈ ½ÇÇàÀº °æÁ¦ÀûÀÌ°í ¹ÝÀÀ¼ºµµ ÁÁ´Ù. ÀÌ·± ÀÌÀ¯·Î Äõ¸®ÀÇ »ý¼º°ú
½ÇÇàÀ» º°µµ·Î ºÐ¸®ÇÏ¿© ó¸®ÇÑ´Ù. ´Ù¸¸ Count, Sum,
Average µî ´ÜÀÏ°ªÀ» ±¸ÇÏ´Â Äõ¸®´Â Áö¿¬½Ãų ÇÊ¿ä ¾ø´Ù. Äõ¸®¸¦ Áï½Ã ½ÇÇàÇÏ°í ½Í´Ù¸é
»ý¼º ÈÄ °ð¹Ù·Î ¼øȸÇÏ¸é¼ º°µµÀÇ Ä÷º¼Ç¿¡ ÀúÀåÇÏ¸é µÈ´Ù.
var QuerySrc = from n in ar select n;
List<int> Query = new List<int>();
foreach (int k in QuerySrc) {
Query.Add(k);
}
»çº»À» ¶° µÎ¸é ¿øº»ÀÌ ¾î¶»°Ô ¹Ù²î´õ¶óµµ Äõ¸® »ý¼º ½ÃÁ¡ÀÇ °ªÀ» ÀÐÀ» ¼ö ÀÖ´Ù. Äõ¸®½ÄÀÇ ToList³ª ToArray ¸Þ¼µå¸¦ È£ÃâÇϸé ÀÌ ÀÛ¾÷À» ´õ ½±°Ô
ó¸®ÇÒ ¼ö ÀÖ´Ù. DeferredExec ¿¹Á¦ÀÇ Äõ¸® Á¤Àǹ®À» ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇØ º¸ÀÚ.
var Query = (from n in ar select n).ToList();
ar ¹è¿ÀÌ ¾î¶»°Ô ¹Ù²îµç »ó°ü¾øÀÌ »çº»À» ¶ã ¶§ÀÇ °ªÀÌ Ãâ·ÂµÈ´Ù. ToList() ¸Þ¼µå°¡ »çº»À» ¶ß´Â ¹ø°Å·Î¿î ÀÛ¾÷À» ´ë½ÅÇÑ´Ù.