|
°Á Àü Å¿ÀÀÇ Àâ´ã>
À̹ø °Á´ Å¿À »çÀÌÆ®ÀÇ ¸â¹öÀÌÀÚ, Microsoft MVPÀÎ ±è °æ±Õ´ÔÀÌ Á¦°øÇÏ´Â LINQ¿¡ °üÇÑ À̾߱âÀÔ´Ï´Ù.
¸¹Àº ºÐµéÀÌ °ü½ÉÀ» °¡Áö°í ÀÖ´Â LINQ¿¡ ´ëÇØ ±âº»ÀûÀÎ °³³äÀ» ÀÌÇØÇÒ ¼ö ÀÖ´Â °Á°¡ µÉ ¿¹Á¤ÀÌ´Ï ¸¹Àº °ü½ÉÀ» ºÎʵ右´Ï´Ù.
LINQ to SQL¿¡ ´ëÇÏ¿© ¾Ë¾Æº¸ÀÚ
À̹ø °Á¿¡¼´Â LINQ to SQLÀ» »ç¿ëÇÏ´Â ¹æ¹ýÀ» °£´ÜÇÑ Blog ¿¹Á¦¸¦ ÅëÇØ ¾Ë¾Æº¸µµ·Ï ÇϰڽÀ´Ï´Ù.
LINQ to SQLÀº LINQÀÇ ÇÑ ºÎºÐÀ¸·Î SQL¼¹öÀÇ µ¥ÀÌÅ͸¦ Á» ´õ Æí¸®Çϰí Á÷°üÀûÀ¸·Î ´Ù·ê ¼ö ÀÖ°Ô ÇØÁÖ´Â MicrosoftÀÇ »õ·Î¿î ±â¼úÀÔ´Ï´Ù. ÃֽйöÀüÀÇ LINQ´Â .NET Framework3.5°¡ Á¤½Ä ¸±¸®Áî µÇ¸é¼ ¾à°£ º¯°æµÈ ºÎºÐÀÌ ÀÖÀ¸¸ç º» °Á¿¡¼´Â »õ·Ó°Ô ¸±¸®ÁîµÈ .NET Framework3.5 ±â¹ÝÀ¸·Î Äڵ带 ÀÛ¼ºÇÏ¿´½À´Ï´Ù.
¶ÇÇÑ ÀÌ ±ÛÀÇ ¸ðµç ÄÚµå´Â Visual Studio 2008 RTM¹öÀüÀ¸·Î ÀÛ¼º µÇ¾ú½À´Ï´Ù.
1. À¥ÇÁ·ÎÁ§Æ® »ý¼º ¹× dbml(LINQ to SQL Classes)»ý¼º
°¡Àå ¸ÕÀú Web Project¸¦ »ý¼ºÇÕ´Ï´Ù.

À¥ ¾îÇø®ÄÉÀ̼ÇÀ» »ý¼ºÇÑ ÈÄ ÇÁ·ÎÁ§Æ® ¹× ¼Ö·ç¼Ç À̸§À» Lec_Blog·Î ÀÔ·Â ÇÕ´Ï´Ù.
´ÙÀ½À¸·Î LINQ to SQL ClassesÅÛÇø´À» ¼±ÅÃÇÏ¿© Blog.dbmlÀ̶ó´Â À̸§À¸·Î ÆÄÀÏÀ» »ý¼ºÇÕ´Ï´Ù.

LINQ to SQL Classes¸¦ »ý¼ºÇϸé LINQ to SQL DesignerȸéÀÌ ³ªÅ¸³ª°Ô µÇ¸ç ÀÌ ¿µ¿ª¿¡ µ¥ÀÌÅͺ£À̽º¸¦ Ç¥ÇöÇÏ´Â ¸ðµ¨
Ŭ·¡½º¸¦ Ãß°¡ÇÒ ¼ö ÀÖ½À´Ï´Ù. Å×À̺í, ÀúÀåÇÁ·Î½ÃÀú, »ç¿ëÀÚ Á¤ÀÇ ÇÔ¼ö µîÀÌ Ãß°¡µÇ¸é LINQ to SQL Classes´Â ½ÇÁ¦ µ¥ÀÌÅͺ£À̽ºÀÇ
°¢ Å×À̺íÀ» ³ªÅ¸³»´Â ÇÁ·ÎÆÛƼ¿Í ÀúÀå ÇÁ·Î½ÃÀú¸¦ ³ªÅ¸³»´Â ¸Å¼µå µîÀ» Æ÷ÇÔÇÏ´Â DataContextŬ·¡½º¸¦ »ý¼ºÇÏ°Ô µË´Ï´Ù.
DataContextŬ·¡½º´Â º¯°æµÈ µ¥ÀÌÅ͸¦ Àû¿ëÇϰųª µ¥ÀÌÅͺ£À̽º·ÎºÎÅÍ µ¥ÀÌÅ͸¦ Äõ¸® ÇÒ ¶§ ¹Ýµå½Ã »ç ¿ëÇÏ°Ô µÇ´Â LINQ to SQLÀÇ ÇÙ½ÉÀÌ µÇ´Â Ŭ·¡½º ÀÔ´Ï´Ù.
LINQ to SQL Classes ÆÄÀÏÀ» Ãß°¡ÇÏ¸é ´ÙÀ½°ú °°Àº LINQ to SQL Designer ȸéÀÌ ³ªÅ¸³ª°Ô µË´Ï´Ù.

LINQ to SQL DesignerÀÇ ¿ÞÂÊ ¿µ¿ª¿¡ Å×À̺íÀ» ²ø¾î ³õ°Ô µÇ¸é µ¥ÀÌÅÍ Å¬·¡½º¸¦ ÀÚµ¿À¸·Î »ý¼ºÇÕ´Ï´Ù.
¿À¸¥ÂÊ ¿µ¿ªÀº ÀúÀåÇÁ·Î½ÃÀú ¶Ç´Â »ç¿ëÀÚÁ¤ÀÇ ÇÔ¼ö¸¦ ²ø¾î ³õÀ» °æ¿ì °¢ ÀúÀåÇÁ·Î½ÃÀú¿Í »ç¿ëÀÚ Á¤ÀÇ ÇÔ¼ö¿¡ ÇØ´çµÇ´Â ¸Å¼µå¸¦ ÀÚµ¿À¸·Î »ý¼ºÇÕ´Ï´Ù.
LINQ to SQL DesignerÀÇ ¿ÞÂÊ ¿µ¿ª¿¡ Å×À̺íÀ» Ãß°¡ ÇØ º¸µµ·Ï ÇϰڽÀ´Ï´Ù.
¿ì¼± Server ExplorerÀ» ¿°í µ¥ÀÌÅͺ£À̽º¿¡ ¿¬°áÇÕ´Ï´Ù.

¹Ì¸® Ãß°¡ÇÑ Lec_Blog µ¥ÀÌÅͺ£À̽º¸¦ ¼±ÅÃÇϰí ok¹öưÀ» Ŭ¸¯ÇÕ´Ï´Ù. µ¥ÀÌÅͺ£À̽º°¡ Ãß°¡ µÇ¸é ¾Æ·¡ À̹ÌÁö¿Í °°Àº ÇüÅ·ΠServer Explorer°¡ ±¸¼ºµË´Ï´Ù.

Server Explorer¿¡¼ CategoryÅ×À̺í°ú PostÅ×À̺íÀ» LINQ to SQL DesignerÀÇ ¿ÞÂÊ ¿µ¿ª ²ø¾î ³õÀ¸¸é ²ø¾î ³õÀº °¢ Å×À̺íµéÀÌ ½Ã°¢ÀûÀ¸·Î Ç¥½Ã µË´Ï´Ù.

ÀÌÁ¦ LINQ to SQLÀ» ÀÌ¿ëÇÏ¿© °£´ÜÇÑ ºí·Î±× °³¹ßÀ» Çϱâ À§ÇÑ ±âº»ÀûÀÎ Áغñ°¡ ¿Ï·á µÇ¾ú½À´Ï´Ù.
Å×ÀÌºí ½ºÅ°¸¶ ¹× ¼Ò½ºÄÚµå´Â ¿©±â¼ ´Ù¿î·Îµå ¹ÞÀ¸½Ç ¼ö ÀÖ½À´Ï´Ù.
´Ù¿î·Îµå ¹ÞÀ¸½Ã·Á¸é Ŭ¸¯Çϼ¼¿ä
2. µ¥ÀÌÅÍ °¡Á®¿À±â(SELECT)
Post.aspx¶ó´Â À¥ÆäÀÌÁö¸¦ Ãß°¡ÇÕ´Ï´Ù. ÀÌ ÆäÀÌÁö´Â Æ÷½ºÆ®¸¦ ÀÛ¼º, ¼öÁ¤ ±×¸®°í »èÁ¦ ÇÏ´Â ±â´ÉÀ» °®°í ÀÖ´Â ÆäÀÌÁö ÀÔ´Ï´Ù. ÆäÀÌÁöÀÇ ±¸¼ºÀº Ä«Å×°í¸®¸¦ ¼±ÅÃÇÒ ¼ö ÀÖ´Â DropDownLIst, Á¦¸ñ°ú ÅØ½ºÆ®¸¦ ÀÔ·Â ¹Þ´Â TextBox ±×¸®°í ÀúÀåÀ» À§ÇÑ ButtonÀ¸·Î ±¸¼ºµÇ¾î ÀÖ½À´Ï´Ù.
ù¹øÂ°·Î »õ Æ÷½ºÆ®¸¦ ÀÛ¼ºÇÒ ¶§ Ä«Å×°í¸®¸¦ ¼±ÅÃÇÒ ¼ö ÀÖ´Â ±â´ÉÀ» Ãß°¡ Çϵµ·Ï ÇϰڽÀ´Ï´Ù.
BlogDataContext db;
protected void Page_Load(object sender, EventArgs e)
{
db = new BlogDataContext();
if (!IsPostBack)
{
cateogryBind();
}
}
private void cateogryBind()
{
IQueryable<Category> category = from c in db.Categories
select c;
//IQueryable<Category> category = db.Categories.Select(p => p);
ddlCategory.DataSource = category;
ddlCategory.DataBind();
}
À§ÀÇ Äڵ忡¼ °¡Àå ¸ÕÀú ¾Ë¾Æ¾ß ÇÒ ºÎºÐÀÌ BlogDataContextÀÔ´Ï´Ù. ¾Õ¿¡¼µµ ¸»ÇÑ °Í ó·³ DataContextŬ·¡½º´Â º¯°æµÈ
µ¥ÀÌÅ͸¦ Àû¿ëÇϰųª µ¥ÀÌÅͺ£À̽º·ÎºÎÅÍ µ¥ÀÌÅ͸¦ Äõ¸® ÇÒ ¶§ ¹Ýµå½Ã »ç¿ëÇÏ°Ô µÇ´Â LINQ to SQLÀÇ ÇÙ½ÉÀÌ µÇ´Â Ŭ·¡½º ÀÔ´Ï´Ù.
ÄÚµåÀÇ categoryBind ¸Å¼µå¸¦ º¸¸é Äõ¸®±¸¹®À» ÀÌ¿ëÇÏ¿© CategoryÅ×À̺íÀÇ ¸ðµç µ¥ÀÌÅ͸¦ °¡Á®¿Í IQueryable<Category>ŸÀÔÀÇ º¯¼ö¿¡ ÇÒ´ç ÇÕ´Ï´Ù.
Äõ¸®±¸¹®À» º¸¸é fromÀý¿¡¼ µ¥ÀÌÅ͸¦ °¡Á®¿À°Ô µÉ µ¥ÀÌÅͼҽº¸¦ ÁöÁ¤ÇÕ´Ï´Ù. BlogDataContextÀÇ ÀνºÅϽºÀÎ db°³Ã¼¸¦ ÀÌ¿ëÇÏ¿© Categories¿¡ Á¢±ÙÇϸç ÀÌ Categories(CategoryÅ×À̺í
Ŭ·¡½º)ÀÇ entity¸¦ c¶ó °¡Á¤ÇÏ°í Æ¯º°ÇÑ Á¶°Ç(WhereÀý) ¾øÀÌ c¸¦ SelectÇÕ´Ï´Ù. ÀÌ´Â Ä«Å×°í¸® Å×À̺íÀÇ ¸ðµç µ¥ÀÌÅ͸¦ °¡Á®¿Â´Ù´Â ÀÇ¹Ì¿Í °°½À´Ï´Ù.
Äõ¸®±¸¹® ¾Æ·¡ ÁÖ¼®À¸·Î ó¸®µÈ ºÎºÐÀº Äõ¸®±¸¹®À» »ç¿ëÇÏ´Â ´ë½Å Lambda ExpressionÀ» »ç¿ëÇÏ¿© µ¥ÀÌÅ͸¦ °¡Á®¿À´Â ¶Ç ´Ù¸¥ ¹æ¹ýÀÔ´Ï´Ù. ¾î¶² ¹æ¹ýÀ» »ç¿ëÇØµµ °á°ú´Â µ¿ÀÏÇÕ´Ï´Ù.
°¡Á®¿Â µ¥ÀÌÅ͸¦ DropDownListÀÇ DataSource¿¡ ÇÒ´çÇÏ°í ¹ÙÀε带 ÇÕ´Ï´Ù.
DropDownListÀÇ DataSource·Î ListItemCollectionŸÀÔÀ» »ç¿ëÇÏÁö ¾ÊÀ» °æ¿ì¿¡´Â DataTextField¿Í DataValueField¸¦ ¹Ýµå½Ã ÁöÁ¤ÇØ¾ß ÇÕ´Ï´Ù. À̸¦ °¢°¢ CategoryName°ú CategoryID·Î ÁöÁ¤ ÇØ ÁÖ¸é Category¸¦ ¼±ÅÃÇÒ ¼ö ÀÖ´Â DropDownList°¡ ¸¸µé¾î Áö°Ô µË´Ï´Ù.
µ¥ÀÌÅÍÀÇ Á¶È¸´Â ¸¶Áö¸· éÅÍ¿¡¼ ´õ ÀÚ¼¼È÷ ¾Ë¾Æº¸µµ·Ï ÇϰڽÀ´Ï´Ù.
3. µ¥ÀÌÅÍ ÀúÀå(INSERT)
´ÙÀ½À¸·Î Æ÷½ºÆ®ÀÇ ³»¿ëÀ» ÀúÀåÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ ¾Ë¾Æº¸°Ú½À´Ï´Ù.
protected void btnSubmit_Click(object sender, EventArgs e)
{
Post post = new Post();
post.Title = txtTitle.Text;
post.Content = txtContent.Text;
post.PubDate = DateTime.Now;
post.CategoryID = Convert.ToInt32(ddlCategory.SelectedItem.Value);
db.Posts.InsertOnSubmit(post);
}
LINQ to SQL Classes¿¡ Category¿Í PostÅ×À̺íÀ» ²ø¾î ³õ¾Ò±â ¶§¹®¿¡ °¢ Å×À̺íÀÇ entity¿¡ ÇØ´çÇÏ´Â Post ¹× CategoryŬ·¡½º°¡ »ý¼º µË´Ï´Ù.
°¡Àå¸ÕÀú PostÀÇ ÀνºÅϽº¸¦ ¸¸µì´Ï´Ù. LINQ´Â Å×À̺íÀÇ Çʵå¸íÀ» ½±°Ô È®ÀÎ ÇÒ ¼ö ÀÖµµ·Ï ¿Ïº®ÇÑ ÀÎÅÚ¸®¼¾½º¸¦ Á¦°øÇÕ´Ï´Ù. »ý¼ºµÈ post°³Ã¼ÀÇ °¢ Çʵ忡 °ªÀ» ÇÒ´çÇÕ´Ï´Ù. ¸¶Áö¸·À¸·Î Å×ÀÌºí¿¡ ÇØ´çÇÏ´Â db.PostsÀÇ InsertOnSubmitÀ» È£ÃâÇÕ´Ï´Ù. PostsÀÇ InsertOnSubmit¸Å¼µå´Â ¸Å°³º¯¼ö·Î PostsÀÇ entityÀÎ PostŸÀÔÀÇ °³Ã¼¸¦ ¹Þ½À´Ï´Ù.
¿©±â¼ ±âÁ¸¿¡ LINQ¸¦ »ç¿ë ÇØ º¸½Å ºÐµé²²¼´Â InsertOnSubmit¸Å¼µå°¡ »ý¼ÒÇÒ ¼ö ÀÖ½À´Ï´Ù. ±âÁ¸¿¡´Â ºÐ¸í Add¸Å¼µå¸¦ ÀÌ¿ëÇÏ¿© µ¥ÀÌÅ͸¦ Ãß°¡Çϰí OnSubmitChange¸Å¼µå¸¦ È£ÃâÇÏ¿© µ¥ÀÌÅ͸¦ Àü¼ÛÇß¾úÁö¸¸ Á¤½Ä¹öÀüÀÇ Ãâ½Ã¿Í ÇÔ²² ¾à°£ÀÇ ¸Å¼µå°¡ º¯°æ µÇ¾ú½À´Ï´Ù.
| Beta1 and Beta2 |
VS 2008 RTM |
| Add() |
InsertOnSubmit() |
| AddAll() |
InsertAllOnSubmit() |
| Remove() |
DeleteOnSubmit() |
| RemoveAll() |
DeleteAllOnSubmit() |
À§ÀÇ Ç¥´Â Beta¿¡¼ RTM·Î ¹öÀü ¾÷ µÇ¸é¼ º¯°æµÈ ¸Å¼µå µéÀÔ´Ï´Ù. Âü°í Çϼ¼¿ä..
4. µ¥ÀÌÅÍÀÇ ¼öÁ¤ ¹× »èÁ¦
µ¥ÀÌÅ͸¦ ¼öÁ¤Çϰųª »èÁ¦Çϱâ À§Çؼ´Â °¡Àå ¸ÕÀú ¼öÁ¤À̳ª »èÁ¦¸¦ Çϱâ À§ÇÑ µ¥ÀÌÅ͸¦ °¡Á®¿Í entity °³Ã¼¸¦ »ý¼ºÇØ¾ß ÇÕ´Ï´Ù.
Post post;
int postId = Convert.ToInt32(Request.QueryString["postid"]);
if (postId > 0)
{
post = db.Posts.Single(p => p.PostID == postId);
}
µ¥ÀÌÅÍÀÇ »ðÀÔ°ú ¸¶Âù°¡Áö·Î entity°³Ã¼ÀÇ °¢ ¼Ó¼º¿¡ °ªÀ» ÇÒ´çÇÕ´Ï´Ù.
post.Title = txtTitle.Text;
post.Content = txtContent.Text;
post.PubDate = DateTime.Now;
post.CategoryID = Convert.ToInt32(ddlCategory.SelectedItem.Value);
°ªÀ» ¸ðµÎ ÇÒ´ç ÇÑ ´ÙÀ½ º¯°æµÈ °ªÀ» ó¸®Çϱâ À§ÇØ BlogDataContextÀÇ SubmitChanges ¸Å¼µå¸¦ È£ÃâÇÏ¿© ¼öÁ¤À» ¿Ï·á ÇÕ´Ï´Ù.
db.SubmitChanges();
µ¥ÀÌÅÍ »èÁ¦ÀÇ °æ¿ì´Â entity°³Ã¼¸¦ »ý¼ºÇÑ ÈÄ db°³Ã¼ÀÇ DeleteOnSubmit¸Å¼µå¸¦ È£Ãâ Çϱ⸸ ÇÏ¸é »èÁ¦ 󸮰¡ ÀÌ·ç¾î Áý´Ï´Ù.
5. Äõ¸®±¸¹®ÀÇ ¿ë¹ý ¹× ÄÁÆ®·Ñ µ¥ÀÌÅÍ ¹ÙÀεù
Áö±ÝºÎÅÍ Á¶±Ý ´õ ´Ù¾çÇÑ LINQ Äõ¸® ±¸¹®À» ÀÌ¿ëÇÏ¿© µ¥ÀÌÅ͸¦ °¡Á®¿À°í ¶ÇÇÑ °¡Á®¿Â µ¥ÀÌÅ͸¦ ListViewÄÁÆ®·Ñ¿¡ ¹ÙÀεù ÇÏ´Â ¹æ¹ýÀ» ºí·Î±×ÀÇ ¸ÅÀÎ ÆäÀÌÁö¸¦ ¸¸µé¸é¼ º¸´Ù ÀÚ¼¼È÷ ¼³¸íÇϵµ·Ï ÇϰڽÀ´Ï´Ù.
ºí·Î±×ÀÇ ¸ÞÀÎÆäÀÌÁö´Â ¿ÞÂÊ Ä«Å×°í¸® ¿µ¿ª°ú ¿À¸¥ÂÊ Æ÷½ºÆ®¸ñ·Ï ¿µ¿ªÀ¸·Î ³ª´©µµ·Ï ÇϰڽÀ´Ï´Ù.
ÀÌ µÎ ºÎºÐÀº .Net Frameowrk3.5¿¡¼ »õ·Ó°Ô µîÀåÇÑ ListViewÄÁÆ®·ÑÀ» »ç¿ëÇϰí ÀÖ½À´Ï´Ù.
<asp:ListView ID="categoryList" ItemPlaceholderID="categoryItems" runat="server">
<LayoutTemplate>
<ul style="margin:0 0 0 0;padding:0 0 0 0">
<asp:PlaceHolder ID="categoryItems" runat="server"></asp:PlaceHolder>
</ul>
</LayoutTemplate>
<ItemTemplate>
<li><a href="default.aspx?categoryid=<%#Eval("categoryID") %>"><%#Eval("CategoryName") %></a></li>
</ItemTemplate>
</asp:ListView>
ListViewÄÁÆ®·ÑÀÇ »ç¿ë¹ýÀº º» °ÁÂÀÇ ÁÖÁ¦¿¡¼ ¹þ¾î³ª±â ¶§¹®¿¡ °£´ÜÇÏ°Ô ¼³¸í Çϵµ·Ï ÇϰڽÀ´Ï´Ù.
ListViewÄÁÆ®·ÑÀº °£´ÜÈ÷ LayoutTemplete°ú ItemTemplete¿µ¿ªÀ¸·Î ³ª´ ¼ö Àִµ¥ LayoutTempleteÀº ¸ñ·ÏÀÇ
Çì´õ ¶Ç´Â ¸ñ·ÏÀ» °¨½Î´Â Tag¸¦ ÁöÁ¤ÇÏ¿© ±âº» LayoutÀ» ÁöÁ¤ÇÏ´Â ¿µ¿ªÀÔ´Ï´Ù. ¹Ýº¹µÇ´Â µ¥ÀÌÅ͸¦ Ç¥ÇöÇÏ´Â ºÎºÐÀ» PlaceHolder¸¦ ÅëÇØ ÁöÁ¤ÇØÁÖ°í ÀÌ ÄÁÆ®·ÑÀÇ ¾ÆÀ̵𸦠ListViewÄÁÆ®·ÑÀÇItemPlaceholderID¼Ó¼º¿¡ ÁöÁ¤ÇÕ´Ï´Ù.
ItemTemplete¿µ¿ªÀº ½ÇÁ¦ ¹Ýº¹µÇ´Â ºÎºÐÀ» ¸¸µé¾î ÁÝ´Ï´Ù. µ¥ÀÌÅÍ´Â Eval¸Å¼µå¸¦ ÅëÇØ ÁöÁ¤ÇØ ÁÝ´Ï´Ù. À̰÷¿¡¼ ¹Ýº¹ÀûÀ¸·Î »ý¼ºµÈ Äڵ尡 LayoutTempleteÀÇ PlaceHolderÄÁÆ®·Ñ¿¡ Ç¥ÇöµË´Ï´Ù.
´ÙÀ½À¸·Î µ¥ÀÌÅ͸¦ ListViewÄÁÆ®·Ñ¿¡ ¹ÙÀεù ÇÏ´Â ÄÚµå´Â ¾Æ·¡¿Í °°½À´Ï´Ù.
List<Category> categories = db.Categories.ToList();
categoryList.DataSource = categories;
categoryList.DataBind();
ÄÚµå´Â DropDownList¿¡ µ¥ÀÌÅ͸¦ ¹ÙÀεù ÇßÀ» ¶§¿Í »ó´çÈ÷ À¯»çÇÕ´Ï´Ù.
´Ù¸¥ Á¡Àº ToList() È®Àå ¸Å¼µå¸¦ »ç¿ëÇÏ¿© ¹Ýȯ ŸÀÔÀ» List<T>ŸÀÔÀ¸·Î ÇÑ´Ù´Â °ÍÀÔ´Ï´Ù.
Äõ¸®±¸¹®Àº ±âº»ÀûÀ¸·Î IQueryable<T>ÇüÅ·Π¸¸µé¾î Áö°Ô µË´Ï´Ù. ÀÌ Å¸ÀÔÀº ·çÇÁ¸¦ µ¹¸é¼ °ªÀ» »ç¿ëÇϱ⠽ÃÀÛÇÒ ¶§ ½ÇÁ¦ DB¿Í Åë½ÅÀ» ÇÏ¿© °ªÀ» °¡Á®¿À°Ô µË´Ï´Ù.
À§ÀÇ À̹ÌÁö¿¡¼µµ È®ÀÎ µÇµíÀÌ µð¹ö±×¸¦ ÇØ º¸¸é var categories ºÎºÐ ¿¡¼´Â ¾Æ¹«·± µ¥ÀÌÅ͸¦ ¹Þ¾Æ ¿ÀÁö ¸øÇϰí DataSource¿¡ °ªÀ» ÇÒ´ç ÇÏ¿´À» ¶§ ºñ·Î¼Ò µ¥ÀÌÅ͸¦ ¹Þ¾Æ ¿Â °ÍÀ» º¼ ¼ö ÀÖ½À´Ï´Ù.
À§ÀÇ ÄÚµå´Â ToList() È®Àå ¸Å¼µå¸¦ »ç¿ëÇÑ °æ¿ìÀε¥ À̶§´Â categoriesº¯¼ö¿¡ ¸¶¿ì½º¸¦ ¿Ã¸®ÀÚ ¹Ù·Î °ªÀ» ¹Þ¾Æ ¿Â °ÍÀ» È®ÀÎ ÇÒ ¼ö ÀÖ½À´Ï´Ù.
ToList(), ToArray()¿Í °°Àº È®Àå ¸Å¼µå¸¦ »ç¿ëÇÏ¸é µ¥ÀÌÅÍÀÇ Å¸ÀÔÀ» º¯°æÇÏ´Â µ¿½Ã¿¡ Áï½Ã µ¥ÀÌÅͺ£À̽º¿Í Åë½ÅÀ» ÇÏ¿© °ªÀ» ¹Þ¾Æ ¿Ã ¼ö ÀÖ½À´Ï´Ù.
¸¶Áö¸·À¸·Î Where±¸¹®À» »ç¿ëÇÏ¿© Á¶°Ç º°·Î µ¥ÀÌÅ͸¦ °¡Á®¿À°í Skip°ú TakeÈ®Àå ¸Å¼µå¸¦ »ç¿ëÇÏ¿© ÆäÀÌ¡À» ó¸® ÇÏ´Â ºÎºÐ¿¡ ´ëÇØ ¾Ë¾Æº¸µµ·Ï ÇϰڽÀ´Ï´Ù.
1) Á¶°Ç ÀýÀ» ÀÌ¿ëÇÑ µ¥ÀÌÅÍ Á¶È¸ ¹× Á¤·Ä(´ÜÀÏ Æ÷½ºÆ® °¡Á®¿À±â)
List posts = (from p in db.Posts
where p.PostID == postid
orderby p.PubDate descending //Á¤·Ä
select p).ToList();
À§ÀÇ Äڵ忡¼´Â whereÀýÀ» »ç¿ëÇÏ¿© PostID°ªÀ» ºñ±³ÇÏ¿© µ¥ÀÌÅ͸¦ °¡Á®¿À¸ç orderbyÀýÀ» ÀÌ¿ëÇÏ¿© PubDate¸¦ ±âÁØÀ¸·Î ³»¸²Â÷¼øÀ¸·Î Á¤·ÄÇÕ´Ï´Ù.
2) ÆäÀÌ¡(ÇÑ È¸é¿¡ º¸¿© ÁÙ Æ÷½ºÆ®µéÀ» °¡Á®¿À±â)
List<Post> posts = (from p in db.Posts
orderby p.PubDate descending
select p).Skip(currentPageIdx * itemCount).Take(itemCount).ToList();
PubDate¸¦ ±âÁØÀ¸·Î Á¤·Ä Çϸç SkipÈ®Àå ¸Å¼µå¸¦ ÅëÇØ [ÇöÀçÆäÀÌÁö¹øÈ£*ÇÑ ÆäÀÌÁöÀÇ Ç׸ñ ¼ö]¸¸ÅÀ» skipÇϰí TakeÈ®Àå ¸Å¼µå¸¦ »ç¿ëÇÏ¿© ÇÑ ÆäÀÌÁöÀÇ Ç׸ñ ¼ö ¸¸Å °¡Á®¿É´Ï´Ù.
3) Á¶°Ç Àý°ú ÆäÀÌÁöÀ» ¸ðµÎ ÀÌ¿ëÇÑ µ¥ÀÌÅÍ Á¶È¸(Ä«Å×°í¸® º° ¸ñ·ÏÀ» ÆäÀÌ¡À» ÅëÇÏ¿© °¡Á®¿À±â)
List<Post> posts = (from p in db.Posts
where p.CategoryID == categoryid
orderby p.PubDate descending
select p).Skip(currentPageIdx * itemCount).Take(itemCount).ToList();
À§¿¡¼ °¡Á®¿Â µ¥ÀÌÅ͸¦ ListViewÄÁÆ®·Ñ¿¡ ¹ÙÀεù Çϱâ À§ÇØ ListViewÄÁÆ®·ÑÀ» ±¸¼ºÇϸé
// Category¿µ¿ª
<asp:ListView ID="ListView1" runat="server" ItemPlaceholderID="categoryItems">
<LayoutTemplate>
<ul style="margin:0 0 0 0;padding:0 0 0 0">
<asp:PlaceHolder ID="categoryItems" runat="server"></asp:PlaceHolder>
</ul>
</LayoutTemplate>
<ItemTemplate>
<li>
<a href='default.aspx?categoryid=<%#Eval("categoryID") %>'>
<%#Eval("CategoryName") %></a>
</li>
</ItemTemplate>
</asp:ListView>
// Æ÷½ºÆ® ¿µ¿ª
<asp:ListView ID="postList" ItemPlaceholderID="Items" runat="server">
<LayoutTemplate>
<asp:PlaceHolder ID="Items" runat="server"></asp:PlaceHolder>
</LayoutTemplate>
<ItemTemplate>
<div>
<div id="titArea">
<span id="title" style="color:White;">
<a href="/Default.aspx? postid=<%#Eval("postid") %>"><%#Eval("title") %></a>
</span>
</div>
<div id="descArea">
<span id="pubDate"><%#Eval("pubDate") %></span>
<span id="category"><%#Eval("Category.CategoryName") %></span>
<span id="edit"><a href="post.aspx?postid=<%#Eval("postid") %>">[¼öÁ¤]</a>
</span>
</div>
<div id="contentArea">
<%#Eval("content") %>
</div> </div>
</ItemTemplate>
</asp:ListView>
ºí·Î±× Æ÷½ºÆ® ¿µ¿ª¿¡¼´Â LayoutTemplate¿¡ PlaceHolderÄÁÆ®·ÑÀ» Ãß°¡Çϰí ItemTemplete¿¡ Á¦¸ñ¿µ¿ª°ú ¼³¸í¿µ¿ª(¹ßÇàÀÏ, Ä«Å×°í¸®, ¼öÁ¤¹öư), ÄÁÅÙÃ÷ ¿µ¿ªÀ» °¢ divű׷Π»ý¼ºÇÕ´Ï´Ù.
µ¥ÀÌÅÍ´Â Eval¸Å¼µå¸¦ ÅëÇÏ¿© ÁöÁ¤À» Çϴµ¥ ¿©±â¼ ƯÀÌÇÑ Á¡Àº <%#Eval("Category.CategoryName") %>ºÎºÐ¿¡¼ CategoryNameÀ» °¡Á®¿À´Â °ÍÀÔ´Ï´Ù. PostÅ×ÀÌºí¿¡´Â CategoryID¸¸ Á¸ÀçÇÒ »Ó CategoryNameÀº Á¸ÀçÇÏÁö ¾Ê´Âµ¥ À§ÀÇ Äڵ忡¼´Â CategoryNameÀ» ÁöÁ¤ÇØ Áá´Ù´Â °ÍÀÔ´Ï´Ù. ÀÌ´Â PostÅ×À̺íÀÌ CategoryID¼Ó¼ºÀ» ÅëÇØ CategoryÅ×À̺í°ú ¿¬°ü°ü°è¸¦ ¸Î°í ÀÖÀ¸¹Ç·Î PostÀÇ Category°³Ã¼¸¦ ÅëÇØ CategoryName¿¡ Á¢±Ù ÇÒ ¼ö ÀÖ°Ô
µÇ´Â °Í ÀÔ´Ï´Ù.
Ä«Å×°í¸® ¿µ¿ª¿¡¼´Â Unorder List(UL)ű׸¦ ListViewÄÁÆ®·Ñ¿¡ »ç¿ëÇÏ¿© Ä«Å×°í¸® ¿ª¿µÀ» »ý¼ºÇÕ´Ï´Ù. LayoutTemplete¿µ¿ªÀ» <ul>ű׷Π±¸¼ºÇÏ°í ¹Ýº¹µ¥ÀÌÅͰ¡ Ç¥ÇöµÉ ¿µ¿ªÀ» PlaceHolderÄÁÆ®·Ñ·Î ÁöÁ¤ÇÕ´Ï´Ù. ItemTelplete¿µ¿ªÀº <li>ű׸¦ »ç¿ëÇÏ¿© ¹Ýº¹µÇ´Â µ¥ÀÌÅ͸¦ Ç¥ÇöÇÕ´Ï´Ù.
ListViewÄÁÆ®·ÑÀº ¹Ýµå½Ã Å×À̺í ÇüŰ¡ ¾Æ´Ñ ¾î¶°ÇÑ ¹Ýº¹ ±¸Á¶µµ Ç¥Çö ÇÒ ¼ö ÀÖ´Â ÀåÁ¡ÀÌ ÀÖ½À´Ï´Ù.
À̹ø ±Û¿¡¼´Â LINQ to SQLÀÇ °£´ÜÇÑ »ç¿ë¹ý¿¡ ´ëÇØ¼ ¾Ë¾Æ º¸¾Ò½À´Ï´Ù. '¾î¶»°Ô LINQ to SQLÀ» »ç¿ëÇÒ ¼ö ÀÖ´Â °¡'¿¡ ÃÊÁ¡À» ¸ÂÃß¾ú±â ¶§¹®¿¡ LINQÀÇ ÀϹÝÀûÀÎ »ç¿ë¹ý¿¡ ´ëÇØ¼¸¸ ¾Ë¾Æ º¸¾Ò½À´Ï´Ù.
´ÙÀ½ °Á´ ´Ù¾çÇÑ Äõ¸®±¸¹®°ú Lambda Expression ¿¹Á¦¸¦ ÅëÇØ LINQ¿¡ ´ëÇØ º¸´Ù ÀÚ¼¼È÷ ¾Ë¾Æº¸µµ·Ï ÇϰڽÀ´Ï´Ù.
±×·³ ´ÙÀ½°Á¿¡¼ ´Ù½Ã ºËµµ·Ï ÇϰڽÀ´Ï´Ù.^^ °¨»çÇÕ´Ï´Ù.
°Á ¸ñ·ÏÀ¸·Î..
|