lecture Home > ASP.NET 2.0 > Taeyo.NET - ASP.NET 2.0

Taeyo.NET - ASP.NET 2.0

   °­Á ÃÖÃÊ ÀÛ¼ºÀÏ : 2007³â 10¿ù 30ÀÏ
   °­Á ÃÖÁ¾ ¼öÁ¤ÀÏ : 2007³â 11¿ù 12ÀÏ

   °­Á ÀÐÀ½ ¼ö : ȸ

   ÀÛ¼ºÀÚ : kobukii(±è °æ±Õ)
   ÆíÁýÀÚ : Taeyo(±è Å¿µ)

   °­Á Á¦¸ñ : LINQ¶õ ¹«¾ùÀΰ¡?

°­Á Àü Å¿ÀÀÇ Àâ´ã>

À̹ø °­Á´ Å¿À »çÀÌÆ®ÀÇ ¸â¹öÀÌÀÚ, Microsoft MVPÀÎ ±è °æ±Õ´ÔÀÌ Á¦°øÇÏ´Â LINQ¿¡ °üÇÑ À̾߱âÀÔ´Ï´Ù. ¸¹Àº ºÐµéÀÌ °ü½ÉÀ» °¡Áö°í ÀÖ´Â LINQ¿¡ ´ëÇØ ±âº»ÀûÀÎ °³³äÀ» ÀÌÇØÇÒ ¼ö ÀÖ´Â °­Á°¡ µÉ ¿¹Á¤ÀÌ´Ï ¸¹Àº °ü½ÉÀ» ºÎʵ右´Ï´Ù.


LINQ¶õ ¹«¾ùÀΰ¡?

LINQ´Â Language Integrate QueryÀÇ ¾àÀڷνá ÅëÇÕ ÁúÀÇ ¾ð¾î ¶ó°í ¸»ÇÒ ¼ö ÀÖ½À´Ï´Ù..
±âÁ¸ÀÇ Query´Â DatabaseÀÇ µ¥ÀÌÅ͸¦ ´Ù·ç±â À§ÇØ »ç¿ëÇÏ´Â ¾ð¾îÂëÀ¸·Î ¿©°Ü Á³½À´Ï´Ù. ÇÏÁö¸¸ LINQ´Â Ä÷º¼Ç ÇüÅ·ΠµÇ¾îÀÖ´Â ¸ðµç µ¥ÀÌÅÍ¿¡ ´ëÇØ ÁúÀǸ¦ ÇÒ ¼ö ÀÖ´Â ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®ÀÇ »õ·Î¿î ±â¼úÀÔ´Ï´Ù.
¿¹¸¦ µéÀÚ¸é MS-SQLÀÇ µ¥ÀÌÅ͸¦ °¡Á®¿À´Âµ¥ LINQ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Â °ÍÀº ¹°·ÐÀÌ°í ¸Þ¸ð¸®»óÀÇ Ä÷º¼Ç ¶Ç´Â XML¿¡ ´ëÇØ¼­µµ LINQ¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
Áö±ÝºÎÅÍ ÀÌ °­·ÂÇÑ ÅëÇÕÁúÀǾð¾îÀÎ LINQ¿¡ ´ëÇØ ¾Ë¾Æº¸µµ·Ï ÇϰڽÀ´Ï´Ù.

1. Extension Method(È®Àå ¸Þ¼­µå)

Extension Method(ÀÌÇÏ È®Àå¸Þ¼­µå)´Â ±âÁ¸ÀÇ Å¸ÀÔ¿¡ ¸Å¼­µå¸¦ Ãß°¡Çϰųª ÀçÄÄÆÄÀÏ ÇÒ ÇÊ¿ä ¾øÀÌ ÀÌ¹Ì Á¸ÀçÇÏ´Â CLRŸÀÔ¿¡ »õ·Î¿î ¸Þ¼­µå¸¦ Ãß°¡ÇÒ ¼ö ÀÖ°Ô ¼³°èµÈ ¸Þ¼­µå ÀÔ´Ï´Ù.

//staticŬ·¡½º¸¦ »ý¼ºÇØ¾ß ÇÑ´Ù.
public static class KClass
{
    //static¸Þ¼­µå·Î »ý¼ºÇØ¾ß ÇÑ´Ù.
    public static int isOdd(this int n)
    {
        //Ȧ¼öÀÏ °æ¿ì 1À» ¹ÝȯÇÑ´Ù.
        if (n % 2 == 1)
            return n;
        return 0;
    }
}

int num = 5;
//intÇüÀÇ º¯¼ö µÚ¿¡ isOdd()¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù.
//numÀÌ 5À̹ǷΠ5¸¦ ¹ÝȯÇÑ´Ù.
int oddValue = num.isOdd();

LINQ ¿Í È®Àå¸Þ¼­´Â ¹«½¼ °ü°èÀΰ¡? È®Àå¸Þ¼­µå´Â LINQ¿¡¼­ Äõ¸®¸¦ À§ÇÑ ¸Þ¼­µå(Select, Where...)´Â È®Àå ¸Þ¼­µå·Î µÇ¾î Àֱ⠶§¹®ÀÔ´Ï´Ù.

À§ÀÇ Ä¸ÃÄÈ­¸éÀ» º¸¸é ºÐÈ«»ö À°¸éü´Â ÀÏ¹Ý ¸Þ¼­µå¸¦ ³ªÅ¸³À´Ï´Ù. ±× Áß¿¡¼­ ÆÄ¶õ»öÀÇ ¾Æ·¡¹æÇâ È­»ìÇ¥°¡ ÀÖ´Â °ÍÀÌ È®Àå¸Þ¼­µå¸¦ ³ªÅ¸³»´Â ¾ÆÀÌÄÜÀε¥ À§¿¡¼­´Â All, Any, AverageµîÀÌ ÀÖ½À´Ï´Ù.

LINQ¿¡¼­´Â »ó´çÈ÷ ¸¹Àº ¼öÀÇ È®Àå¸Þ¼­µå¸¦ »ç¿ëÇÕ´Ï´Ù. °ÅÀÇ ¸ðµç ¸Þ¼­µå°¡ È®Àå¸Þ¼­µå¶ó°í ºÁµµ ¹«¹æÇÒ Á¤µµÁÒ. È®Àå¸Þ¼­µå´Â LINQ»Ó¸¸ÀÌ ¾Æ´Ï¶ó ÀÏ¹Ý Äڵ忡¼­µµ ÀÀ¿ëÇÒ ¼ö Àֱ⿡ ÀÌÀå¿¡¼­ ´Ù·ç¾î º¸¾Ò½À´Ï´Ù.

2. Anonymous Type(À͸í ŸÀÔ)

Anonymous TypeÀº ŸÀÔÀÇ ¼±¾ðÀ» ¸íÈ®ÇÏ°Ô Á¤ÀÇÇÏÁö ¾Ê°í ÄÚµå ³»ÀÇ CLRŸÀÔÀ» °£´ÜÇÏ°Ô Á¤ÀÇÇÏ´Â °ÍÀÌ °¡´ÉÇÑ C#3.0ÀÇ Æí¸®ÇÑ ±â´ÉÀÔ´Ï´Ù.

public class Tech
{
    public string Upper{ get; set;}
    public string Lower{ get; set;}
}

string[] strs = {"ASp.NeT","AjAx","SilvErLigHt"};
IEnumerable<Tech> techs = from s in strs
                    select new Tech
                    {
                        Upper = s.ToUpper(),
                        Lower = s.ToLower()
                    };
foreach (Tech t in techs)
{
    Response.Write(t.Lower + "," + t.Upper + "");
}

À§ÀÇ ¿¹Á¦´Â Query Syntax¸¦ »ç¿ëÇÕ´Ï´Ù. ¾ÆÁ÷ Query SyntaxÀÇ »ç¿ë¹ý¿¡ ´ëÇÏ¿© ¹è¿ìÁö´Â ¾Ê¾ÒÁö¸¸ Anonymous Type¿¡ ´ëÇá¿© ¾Ë¾Æº¸±â À§ÇØ °£´ÜÇÑ Query Syntax¸¦ »ç¿ëÇÏ¿´½À´Ï´Ù.
¿ì¼± Upper¿Í LowerÇÁ·ÎÆÛƼ¸¦ °®´Â Tech¶ó´Â Ŭ·¡½º¸¦ ¸¸µé¾ú½À´Ï´Ù.(ÀÌ Å¬·¡½º´Â ÇÁ·ÎÆÛƼ »ý¼º¹æ¹ýÀÌ ±âÁ¸°ú ¾à°£ ´Ù¸¨´Ï´Ù. À̸¦ Automatic Propertity¶ó°í ÇÕ´Ï´Ù.)
strs¶ó´Â ¹®ÀÚ¿­ ¹è¿­¿¡´Â ´ë¼Ò¹®ÀÚ°¡ ±¸ºÐµÇÁö ¾ÊÀº ¼¼ °³ÀÇ ¹®ÀÚ¿­ÀÌ ÀÖ½À´Ï´Ù. fromÀý¿¡¼­ strs¸¦ »ç¿ëÇÏ°Ú´Ù°í ¸í½ÃÇß°í selectÀý¿¡¼­´Â new TechŰ¿öµå¸¦ ÀÌ¿ëÇØ ¾Õ¿¡¼­ ¸¸µé¾ú´ø TechŸÀÔÀ¸·Î °³Ã¼¸¦ »ý¼ºÇÕ´Ï´Ù. ±×¸®°í °¢°¢ Upper¿Í Lower¿¡ °ªÀ» ÇÒ´çÇÕ´Ï´Ù.
À̸¦ ¹Þ´Â techsº¯¼ö´Â Tech¸¦ ŸÀԸŰ³º¯¼ö·Î ÇÏ´Â IEnumeableÇüÀ¸·Î ¼±¾ðÇÕ´Ï´Ù.

Query Syntax¸¦ ÀÌ¿ëÇÏ¿© ¹Ì¸® Á¤ÀÇµÈ Å¸ÀÔÀ¸·Î µ¥ÀÌÅ͸¦ Äõ¸® Çß½À´Ï´Ù. »ó´çÈ÷ ¸í½Ã ÀûÀÌÁö¸¸ TechŸÀÔÀÌ ¹ü¿ëÀûÀ¸·Î ¾²ÀÌÁö ¾Ê°í ÇöÀç ÄÚµå ºÎºÐ¿¡¼­ ÇѽÃÀûÀ¸·Î »ç¿ëµÈ´Ù¸é Äڵ尡 ¸¹ÀÌ º¹ÀâÇØ Áú ¼ö ÀÖ½À´Ï´Ù.
À̸¦ Á»´õ °£´ÜÇÏ°Ô »ç¿ëÇϱâ À§ÇØ ³ª¿Â °ÍÀÌ Anonymous TypeÀÔ´Ï´Ù.

string[] strs = {"ASp.NeT","AjAx","SilvErLigHt"};
var texts = from s in strs
                select new
                {
                    upper = s.ToUpper(),
                    lower = s.ToLower()
                };
foreach(var t in texts)
{
    Response.Write(t.lower + "," + t.upper + "");
}

À§ÀÇ ÄÚµå´Â ¾ÕÀÇ Äڵ忡 ºñÇØ »ó´çÈ÷ °£´ÜÇØ Á³½À´Ï´Ù. ÀÏ´Ü TechŬ·¡½º Á¤Àǰ¡ ¾ø¾îÁ³½À´Ï´Ù. selectÀýÀ» º¸¸é newŰ¿öµå ´ÙÀ½ TechŬ·¡½º »ý¼ºÀÚ°¡ ¾ø¾îÁø °ÍÀ» º¼ ¼ö ÀÖ½À´Ï´Ù.
Ŭ·¡½ºÀÇ »ý¼ºÀÚ ¾øÀÌ ¹Ù·Î newŰ¿öµå¸¦ ÅëÇØ °³Ã¼¸¦ »ý¼ºÇϰí ÀÓÀÇ·Î upper¿Í lower¸¦ ¸¸µé¾î °ªÀ» ÇÒ´çÇÕ´Ï´Ù.
À̰ÍÀÌ ¹Ù·Î Anonymous TypeÀÔ´Ï´Ù. À͸íÀ¸·Î ŸÀÔÀ» »ý¼ºÇÑ °ÍÀÔ´Ï´Ù.
±×·¡¼­ ÀÌ Äõ¸® °á°ú´Â ŸÀÔÀÌ ¸íÈ®ÇÏÁö ¾Ê±â ¶§¹®¿¡ IEnumeable<>ÇüÀ¸·Î ¹ÞÁö ¾Ê°í var Ű¿öµå¸¦ »ç¿ëÇÏ°Ô µË´Ï´Ù.

´ÙÀ½Àº var Ű¿öµå¿¡ ´ëÇØ ¾Ë¾Æº¸µµ·Ï ÇϰڽÀ´Ï´Ù.

3. var Ű¿öµå

c#3.0¿¡¼­ °¡Àå Ãæ°ÝÀûÀÎ ºÎºÐÀ̶ó°í »ý°¢ÇÏ´Â varŰ¿öµå¿¡ ´ëÇØ ¾Ë¾Æº¸°Ú½À´Ï´Ù.
var Ű¿öµå´Â ±âÁ¸ÀÇ ÀÎÅÍÇÁ¸®Å;ð¾î(javascript..)¿¡¼­ »ç¿ëµÇ´Â Çü½ÄÀÌ Á¤ÇØÁöÁö ¾ÊÀº ¾î¶°ÇÑ ÀÓÀÇÀÇ º¯¼ö¸¦ ³ªÅ¸³À´Ï´Ù.
C#¿¡¼­µµ µåµð¾î varŰ¿öµå°¡ µµÀÔ µÇ¾ú´Âµ¥ ±âÁ¸ÀÇ ÀÎÅÍÇÁ¸®Å;ð¾î¿¡¼­ÀÇ var¿Í´Â °³³äÀÌ ¾à°£ ´Ù¸¨´Ï´Ù.
±âÁ¸ÀÇ varŸÀÔÀº ÇÁ·Î±×·¥À» ½ÇÇàÇÏ´Â µ¿¾È Áï, ·±Å¸ÀÓ ½Ã ŸÀÔÀÌ °áÁ¤µÇ´Â ¹Ý¸é C#ÀÇ varŸÀÔÀº ÄÄÆÄÀÏ ½Ã¿¡ ŸÀÔÀÌ °áÁ¤µË´Ï´Ù.

ÀÌÁ¦ varŰ¿öµå·Î ¸ðµç º¯¼ö¸¦ ´ëüÇÒ ¼ö ÀÖ½À´Ï´Ù. ŸÀÔ¿¡ ´õ ÀÌ»ó ½Å°æ ¾²Áö ¾Ê°í °³¹ßÀÌ °¡´ÉÇÕ´Ï´Ù.
ÇÏÁö¸¸ ASP.NET¿¡¼­´Â »ç¿ëÀÚ°¡ ÆäÀÌÁö¸¦ º¼ ¶§±îÁö °É¸®´Â ½Ã°£¿¡ ÄÄÆÄÀÏ Å¸ÀÓÀÌ Æ÷ÇÔ µË´Ï´Ù. varŰ¿öµå¸¦ ³²¹ßÇϸé ÄÄÆÄÀÏ Å¸ÀÓÀÌ ´Ã¾î³ª°ÔµÇ¾î »ç¿ëÀÚ°¡ È­¸éÀ» º¼ ¶§±îÁö °É¸®´Â ½Ã°£ÀÌ ±æ¾îÁö¹Ç·Î Â¥Áõ³¯ ¼öµµ Àֱ⠶§¹®¿¡ varŸÀÔÀº ÀûÀýÈ÷ ÇÊ¿äÇÑ LINQ°ü·Ã ºÎºÐ¿¡¼­ »ç¿ëÇϰųª ¹Ýµå½Ã ÇÊ¿äÇÑ ºÎºÐ¿¡¼­ »ç¿ëÇÏ´Â °ÍÀÌ Çö¸íÇÑ ¼±Åà ÀÏ °ÍÀÔ´Ï´Ù.

var ŸÀÔ¿¡ ´ëÇØ ¾Ë¾Æ µÎ¼Å¾ß ÇÒ Áß¿äÇÑ Ã¼Å© Æ÷ÀÎÆ®°¡ ÀÖ½À´Ï´Ù.

var ŸÀÔÀº ¸ðµç µ¥ÀÌÅÍ Å¸ÀÔÀÌ µÉ ¼ö ÀÖ½À´Ï´Ù. ÇÏÁö¸¸ ÃʱⰪÀ» ÇÒ´çÇÏÁö ¾ÊÀ» °æ¿ì ÄÄÆÄÀÏ Å¸ÀÓ¿¡ ¾î¶°ÇÑ Å¸ÀÔÀÎÁö ¾Ë ¼ö ¾ø±â ¶§¹®¿¡ ¼±¾ð°ú µ¿½Ã¿¡ °ªÀ» ÇÒ´ç ÇØ¾ß ÇÕ´Ï´Ù.

ÀÌ ºÎºÐÀÌ ±âÁ¸ ÀÎÅÍÇÁ¸®ÅÍ ¾ð¾î¿Í ´Ù¸¥ °¡Àå Áß¿äÇÑ Â÷ÀÌÁ¡ÀÔ´Ï´Ù. ºñÁê¾ó½ºÆ©µð¿À·Î ÀÛ¾÷ÇÒ ¶§ var ŸÀÔ º¯¼ö¿¡ ¹ØÁÙÀÌ ³ªÅ¸³ª¸é Ãʱ⠰ªÀ» ÇÒ´ç Çß´ÂÁö ¿ì¼± È®ÀÎÇØ º¸¼¼¿ä.

Anonymous TypeÀÇ µÎ ¹øÂ° ¿¹Á¦¸¦ ´Ù½Ã »ìÆìº¸¸é Äõ¸® ÇÑ °á°ú°ªÀ» varŸÀÔÀ¸·Î ¹ÞÀº °ÍÀ» È®ÀÎ ÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÀÌ´Â selectÀý¿¡¼­ µ¥ÀÌÅ͸¦ °¡Á®¿Ã ¶§ newŰ¿öµå ¸¸À» »ç¿ëÇß°í ¾î¶°ÇÑ Å¸ÀÔÀÎÁö ¾Ë ¼ö ¾ø´Â Anonymous TypeÀ̱⠶§¹®¿¡ varŰ¿öµå¸¦ »ç¿ëÇÏ¿© °ªÀ» ÇÒ´ç ¹Þ°Ô µË´Ï´Ù.
ÄÄÆÄÀÏ Å¸ÀÓ¿¡ var ŸÀÔÀº selectÇÑ Å¸ÀÔÀ» È®ÀÎÇÑ ´ÙÀ½ ƯÁ¤ ŸÀÔÀ¸·Î Ä¡È¯ÇØ ÁÖ°Ô µÇ´Â °ÍÀÔ´Ï´Ù.
±× ´ÙÀ½ ¾Æ·¡ ÄÚµåÀÇ foreach¹®¿¡¼­µµ ŸÀÔÀ» Á¤È®È÷ ¾Ë ¼ö ¾ø±â ¶§¹®¿¡ varŰ¿öµå¸¦ »ç¿ëÇÒ °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù.

4. Lambda Expression(¶÷´Ù Ç¥Çö½Ä)

¿ë¾î»çÀüÀÇ ¼³¸í¿¡ ÀÇÇϸé Lambda ExpressionÀº '¾î¶² ¹®Á¦¸¦ ÇØ°áÇϱâ À§ÇÑ °úÁ¤À» ¼öÇÐÀû ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© Ç¥ÇöÇÑ ¼ö½Ä'À̶ó°í ¼³¸íµÇ¾î ÀÖ½À´Ï´Ù.
C#3.0ÀÇ Lambda ExpressionÀÇ ±â´É°ú ÀϸƻóÅëÇÏ´Â ºÎºÐÀÔ´Ï´Ù.

Lambda ExpressionÀº C#2.0¿¡¼­ µµÀԵǾú´ø Anonymous Delegate(ÀÍ¸í ´ë¸®ÀÚ, ¹«¸í ¸Þ¼­µå)¸¦ Á» ´õ ½Ç¿ëÀûÀ¸·Î ¸¸µç °ÍÀ¸·Î½á Lambda ExpressionÀº ÄÄÆÄÀÏ °úÁ¤¿¡¼­ Delegate(´ë¸®ÀÚ)·Î ġȯµË´Ï´Ù.  °£´ÜÈ÷ ¼³¸íÇϸé Lambda ExpressionÀº Ä÷º¼Ç¿¡ ÁúÀǸ¦ Çϱâ À§ÇØ LINQ¿¡¼­ »ç¿ëµÇ´Â Ç¥Çö½ÄÀ̶ó°í ¾Ë¾ÆµÎ½Ã¸é µÉ °Í °°½À´Ï´Ù. 

(¸Å°³º¯¼öµé)=>(Ç¥Çö½Ä)

Lambda ExpressionÀº À§¿Í °°ÀÌ ³ªÅ¸³¾ ¼ö ÀÖ½À´Ï´Ù. °£´ÜÇÑ Lambda ExpressionÀÇ ¿¹¸¦ »ìÆìº¸µµ·Ï ÇϰڽÀ´Ï´Ù.

int[] numbers = {1,2,3,4,5,6,7,8,9};
1. IEnumerable<int> odds = numbers.Where(n=>n%2==1);
2. IEnumerable<int> odds = numbers.Where((int n)=>n%2==1);
3. IEnumerable<int> odds = numbers.Where(delegate(int n){return n%2==1;});

Where¸Þ¼­µå´Â C#3.0¿¡¼­ Ãß°¡µÈ IEnumerable<T>ÀÇ °ª¿¡ ¼øÂ÷ÀûÀ¸·Î Á¢±ÙÇÏ¿© ±× °ªÀ» ÇÊÅ͸µ Çϱâ À§ÇÑ È®Àå¸Þ¼­µå ÀÔ´Ï´Ù. È®Àå¸Þ¼­µå¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ¼³¸íÀº µÚ¿¡¼­ Çϵµ·Ï ÇϰڽÀ´Ï´Ù.

WhereÀÇ ÆÄ¶ó¹ÌÅ͸¦ º¸¸é (¸Å°³º¯¼öµé)=>(Ç¥Çö½Ä)°ú °°Àº ÇüÅ·ΠµÇ¾î ÀÖ½À´Ï´Ù. numbersÀÇ °ªµéÀ» Â÷·Ê·Î À̵¿Çϸç Ȧ¼öÀÎ °æ¿ì °ªÀ» ¹ÝȯÇÏ°Ô µË´Ï´Ù.
1¹øÀÇ Ç¥Çö½ÄÀ» Á»´õ ¸íÈ®ÇÏ°Ô ³ªÅ¸³»¸é 2¹ø°ú °°ÀÌ nÀ» int nÀ¸·Î ³ªÅ¸³¾ ¼ö µµ ÀÖ½À´Ï´Ù.
3¹øÀÇ °æ¿ì¿¡´Â 1¹ø ¶Ç´Â 2¹øÀÇ Ç¥Çö½ÄÀÌ ÄÄÆÄÀÏ µÉ ¶§ ¸¸µé¾îÁö´Â ÄÚµå·Î Anonymous DelegateÇüÅ·Π»ý¼ºµÇ°Ô µË´Ï´Ù. óÀ½ºÎÅÍ 3¹ø°ú °°Àº ¹æ½ÄÀ¸·Î »ç¿ëÇØµµ »ó°ü ¾øÁö¸¸ °£°áÇÔÀ» À§ÇØ 1¹ø°ú °°Àº Lambda ExpressionÀ» »ç¿ë ÇÏ´Â °ÍÀ» ±ÇÀå ÇÕ´Ï´Ù.

5. Query Syntax

Query Syntax¶õ Ç¥ÁØ LINQ query ¿¬»êÀÚ¸¦ »ç¿ëÇÏ¿© Äõ¸®¸¦ Ç¥ÇöÇϱâ À§ÇÑ ¼±¾ðÀû Ç¥±â ¹æ¹ýÀÔ´Ï´Ù.
Query Syntax´Â ±âÁ¸ÀÇ Äõ¸®Ã³·³ ¹®ÀÚ¿­À» ÀÌ¿ëÇÏ´Â ¹æ½ÄÀÌ ¾Æ´Ï¶ó ÄÚµå»ó¿¡ ±âÁ¸ Äڵ带 ÀÔ·ÂÇϵíÀÌ ±ò²ûÇÏ°Ô Äõ¸®¸¦ ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. ¶ÇÇÑ Á¤È®ÇÏ°Ô ÀÐ°í ¾²´Â °ÍÀÌ °¡´ÉÇÏ¸ç ½±°Ô ±× ³»¿ëÀ» È®ÀÎ ÇÒ ¼ö ÀÖ½À´Ï´Ù.
¶Ç ÇϳªÀÇ Æí¸®ÇÑ Á¡Àº Visual Studio¸¦ »ç¿ë ÇÒ °æ¿ì ¿Ïº®ÇÑ ÀÎÅÚ¸®¼¾½º¸¦ Á¦°øÇϸç ÄÄÆÄÀÏ Å¸ÀÓÀÇ Ã¼Å© ¶ÇÇÑ Áö¿øÇÕ´Ï´Ù.
Qyery Syntax Ç¥ÇöÀº Àǹ̻óÀ¸·Î LINQ È®Àå¸Þ¼­µå¿Í Lambda ExpressionÀ» »ç¿ëÇÏ´Â °Í°ú µ¿ÀÏÇÕ´Ï´Ù.
ÇÏÁö¸¸ »ç¿ë¹ý ÀÚü°¡ ±âÁ¸ÀÇ Query¿Í µ¿ÀÏÇÏ¿© °³¹ßÀÚ´Â ÀÌ¿¡ Á»´õ ½±°Ô ´Ù°¡°¥ ¼ö ÀÖÀ» °Í °°½À´Ï´Ù.

int[] numbers = {1,2,3,4,5,6,7,8,9};
int[] selNums = from n in numbers
                    where n>5;
                    select n;

À§ÀÇ Query Syntax´Â numbers¹è¿­¿¡¼­ 5º¸´Ù Å« ¼ýÀÚµéÀ» °¡Á®¿À´Â Ç¥Çö½ÄÀÔ´Ï´Ù.
±âÁ¸ÀÇ Query¿Í ´Ù¸¥ Á¡ÀÌ ÀÖ´Ù¸é °¢ ÀýÀÇ À§Ä¡°¡ ±âÁ¸°ú´Â ´Ù¸£°Ô formÀýÀÌ °¡Àå »óÀ§¿¡ ¿À°í ±× ´ÙÀ½ whereÀý ¸¶Áö¸·À¸·Î selectÀýÀÌ ¿À´Â °ÍÀ» È®ÀÎ ÇÒ ¼ö ÀÖ½À´Ï´Ù.
óÀ½ Query Syntax¸¦ »ç¿ëÇÒ °æ¿ì ÀûÀÀÇϱ⠾î·Á¿ï ¼ö ÀÖÁö¸¸ ÀÚ¼¼È÷ º¸¸é ±âÁ¸ÀÇ Queryº¸´Ù ´õ ¸íÈ®ÇÏ°Ô »ç¿ë ÇÒ ¼ö ÀÖ´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù.
°¡Àå ¸ÕÀú ¾îµð¼­ µ¥ÀÌÅ͸¦ °¡Á®¿Ã °ÍÀÎÁö¸¦ Á¤Çϰí(from), °¡Á®¿Â µ¥ÀÌÅÍ Áß¿¡¼­ ¾î¶² µ¥ÀÌÅ͸¦ °É·¯³¾ °ÍÀ̸ç(where), °É·¯Áø µ¥ÀÌÅ͸¦ ¾î¶² ÇüÅ·Π°¡Á®¿Ã °ÍÀΰ¡(select)¸¦ Á¤ÀÇÇÏ°Ô µË´Ï´Ù.

Query Syntax¿¡¼­ fromÀýÀº foreach¿Í »ó´çÈ÷ À¯»çÇÏ´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù.
nÀ̶ó°í °¡Á¤ÇÑ º¯¼ö¿Í ÀÌ º¯¼öÀÇ Á¦ÇÑ ¹üÀ§¸¦ ¼³Á¤ÇÏ´Â ³ª¿­µÉ ¼ö ÀÖ´Â °³Ã¼ numbers¸¦ ÁöÁ¤ÇÑ °ÍÀÌ foreach¿Í »ó´çÈ÷ À¯»çÇϸç À̾îÁö´Â Àý(where, select)¿¡¼­ °¡Á¤ÇÑ º¯¼ö nÀ» »ç¿ëÇÏ´Â°Í ¶ÇÇÑ »ó´çÈ÷ À¯»çÇÕ´Ï´Ù.

À̾îÁö´Â whereÀý°ú selectÀý µîÀº ´ÙÀ½ °­Á¿¡¼­ ÁßÁ¡ ÀûÀ¸·Î ¼³¸íÇϵµ·Ï ÇϰڽÀ´Ï´Ù.

À̹ø ¾ÆÆ¼Å¬¿¡¼­´Â LINQ¸¦ »ç¿ëÇϱâ À§ÇØ ±× ±â¹ÝÀÌ µÇ´Â Lambda Expression, Extension Method, Anonymous Type, var Ű¿öµå, Query Syntax ¿¡ ´ëÇØ ¾Ë¾Æ º¸¾Ò½À´Ï´Ù.
´ÙÀ½ °­Á¿¡¼­´Â ¸Þ¸ð¸® »óÀÇ Ä÷º¼Ç °³Ã¼¿¡ LINQ¸¦ Àû¿ëÇÏ´Â ¹æ¹ý°ú Lamba ExpressionÀ» º¸´Ù À¯¿¬ÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ¸¹Àº ¿¹Á¦¸¦ ÅëÇØ LINQ¿¡ ÇѰÉÀ½ ´õ ±í¼÷ÀÌ µé¾î°¡ º¸µµ·Ï ÇϰڽÀ´Ï´Ù.
´ÙÀ½ °­Á¸¦ ±â´ëÇØ ÁÖ¼¼¿ä..^^ °¨»çÇÕ´Ï´Ù.


°­Á ¸ñ·ÏÀ¸·Î..