asp.net MVC + linq to Entity简单教程(三)linq to Entity的基本操作

MVC搞明白之后,我们就要用一下linq to Entity了。它的基本语法与linq to sql很相似,只是在有一些地方有些区别,个人感觉最大的区别就是linq to sql有的一些功能,它没有,哇哈哈。。。。。。。。。为什么这么说呢。在后面的操作中,遇到了,我会提一下。

  对于用习惯了ado.net的朋友来说,一下写linq to Entity会感觉有点别扭,为什么呢。主要是因为它的SQL写法也正常的我们平时写的写法有一点不一样。这里呢,我建议大家有时间的话,支看一下,SQL-Server 2005技术内幕,这本书。在第一章里,它给出了sql语句的执行顺序。

  如下:

  1, From : 对From子句中的前两个表执行笛卡尔积(交叉联接),生成虚拟表VT1.

  2, ON     : 对VT1应用On筛选器。只有那些使<join_condition>为真的行才被插入VT2.

         3,     Outer(Join)  : 如果指定了outer join(相对于Cross join 或 inner join),保留表中未找到匹配的行将作为外部行添加到VT2,生成VT3,如果From子句包含两个以的表,则对上一个联接生成的结果表和下一个表重复执行步骤1到步骤3,直到处理完所有的表为止。

  4, Where : 对VT3应用where筛选器。只有使用<where_condition>为TRUE的行才被插入VT4.

         5,    Group By : 按Group By子句中的列列表对VT4中的行分组,生成VT5.

         6,    Cube | Rollup : 把超组插入VT5,生成VT6.

   7,    Having :  对VT6应用Having筛选器。只有使用<having_condition>为TRUE的组才会被插入VT7.

   8,    Select  :      处理select列表,产生VT8.

         9,    Distinct  :  将重复的行从VT8中移除,产生VT9。

  10,   Order by :  将VT9中的行按order by 子句的列列表排序,生成一个游标(VC10).

  11,   Top  :  从VC10的开始处选择指定的数量或比例的行,生成表VT11,并返回调用者

  如果你对里面的解释不是很了解,也没有什么关系,你只要了解,sql语句的执行顺序就是从1--11这个顺序。这样来看linq to Entity的语法,你可能就会好多了。

   var tab = from t from table

                         join b from stu on t.id equals b.id

                         where t.schoolcode==schoolcode && b.sortcode=sortcode

                         orderby s.id

                         select new newtable{

                                   id = t.id,

                                   name = b.name

                         }

         我们来看这个linq的语句,处了order by语句被提前外,别的都和执行的顺序是一样的,这样我们就好理解多了。

  好了,下面我就来看一下,linq to Entity中最简单的操作,添加,修改,删除,列表

  在C层中写linq to Entity之前,我们必须实例化一下我们建立的数据模型,

  

[csharp]  view plain copy
  1. NewETrainEntities newEtrain = new NewETrainEntities();  

  添加操作

  

[csharp]  view plain copy
  1. /// <summary>  
  2.         /// 添加操作  
  3.         /// </summary>  
  4.         /// <returns></returns>  
  5.         public ActionResult CreateSave()  
  6.         {  
  7.             //成功失败的标记  
  8.             int flag = 1;  
  9.   
  10.              
  11.                 try  
  12.                 {  
  13.                     //这是对一个表Etrain_Announcement 的model进行定义  
  14.                     Etrain_Announcement e_ann = new Etrain_Announcement();  
  15.   
  16.                     e_ann.schoolcode = Request.Form["hidschoolcode"].ToString();  
  17.                     e_ann.UserType = Request.Form["selIsapp"].ToString();  
  18.                     e_ann.contents = Request.Form["txtContents"].ToString();  
  19.                     e_ann.sendTime = DateTime.Now;  
  20.                     e_ann.createdate = DateTime.Now;  
  21.                     e_ann.modifydate = DateTime.Now;  
  22.   
  23.                     newEtrain.AddToEtrain_Announcement(e_ann);  
  24.              
  25.                     //这里要注意,必须要写这个,我一开始以为加上前面的方法add了就已经添加了,这样不会添加,要进行savachanges()才行  
  26.                     newEtrain.SaveChanges();  
  27.                 }  
  28.                 catch (Exception ex)  
  29.                 {  
  30.                     flag = 0;  
  31.                 }  
  32.              
  33.               
  34.   
  35.   
  36.             return Content(flag.ToString());  
  37.         }  

  修改操作

  
[csharp]  view plain copy
  1. /// <summary>  
  2.        /// 修改操作  
  3.        /// </summary>  
  4.        /// <returns></returns>  
  5.        public ActionResult UpdateSave()  
  6.        {  
  7.            //成功失败的标记  
  8.            int flag = 1;  
  9.   
  10.            try  
  11.                {  
  12.                    int annid = Convert.ToInt32(Request.Form["hidid"]);  
  13.   
  14.                    var info = from ann in newEtrain.Etrain_Announcement  
  15.                               where ann.id == annid  
  16.                               select ann;  
  17.   
  18.                    //关于这个我一直有一个不解,就是我的记录无论是一条还是多条,都必须用foreach来取。不知道有没有别的方法,可以直接取出一条记录  
  19.   
  20.        foreach (var item in info)  
  21.                    {  
  22.                        item.contents = Request.Form["txtContents"];  
  23.                    }  
  24.   
  25.                    newEtrain.SaveChanges();  
  26.                }  
  27.                catch (Exception ex)  
  28.                {  
  29.                    flag = 0;  
  30.                }  
  31.                  
  32.   
  33.            return Content(flag.ToString());  
  34.        }  


    删除操作

  

[csharp]  view plain copy
  1. /// <summary>  
  2.         /// 删除公告  
  3.         /// </summary>  
  4.         /// <param name="id">公告ID</param>  
  5.         /// <returns></returns>  
  6.         public ActionResult DeleteInfo(string id)  
  7.         {  
  8.             //标记位  
  9.             int flag = 1;  
  10.   
  11.             try  
  12.             {  
  13.                 int annid = Convert.ToInt32(id);  
  14.   
  15.                 //这里被注掉的部分的是错误的写法,这里说明一下,我在刚开始用的时候,网上很多教程都是下面这个方法,可是你运行的时候,就会报错。  
  16.                 //var info = from ann in newEtrain.Etrain_Announcement  
  17.                 //where ann.id == annid  
  18.                 //select ann;  
  19.        
  20.       Etrain_Announcement info = newEtrain.Etrain_Announcement.First(p=>p.id==annid);  
  21.   
  22.       //DeleteObject(object Entity)这里的值是一个object类型,可是你删除的最好传一个model否则就会出错  
  23.                 newEtrain.DeleteObject(info);   
  24.                 newEtrain.SaveChanges();   
  25.              }   
  26.              catch(Exception ex)   
  27.              {   
  28.                 flag = 0;   
  29.              }   
  30.              return Content(flag.ToString());   
  31.          }  

         列表显示操作

  

[csharp]  view plain copy
  1. /// <summary>  
  2.         /// 公告列表显示  
  3.         /// </summary>  
  4.         /// <param name="id">学校标识</param>  
  5.         /// <returns></returns>  
  6.         public ActionResult adminIndex(string id)  
  7.         {  
  8.             ViewData["schoolcode"] = id;  
  9.   
  10.             var annInfo = from ann in newEtrain.Etrain_Announcement  
  11.                           where ann.schoolcode == id  
  12.                           orderby ann.id descending  
  13.                           select ann;  
  14.           //这里我用了Take(20)这个操作,为得是显示最后20条信息,这里的Tak()就类似于top  
  15.     return View(annInfo.Take(20));  
  16.         }  

 前台显示页面

  

[csharp]  view plain copy
  1. <% foreach (var item in Model)  
  2.               { %>  
  3.            <tr>  
  4.                <td>  
  5.                    <% if (Html.Encode(item.contents).Length > 10)  
  6.                       { %>  
  7.                    <a href="/Announcement/UserView/<%=Html.Encode(item.id) %>">  
  8.                        <%= Html.Encode(item.contents).Substring(0, 8)%>...</a>  
  9.                    <%}  
  10.                       else  
  11.                       { %>  
  12.                    <a href="/Announcement/UserView/<%=Html.Encode(item.id) %>">  
  13.                        <%= Html.Encode(item.contents)%></a>  
  14.                    <%} %>  
  15.                </td>  
  16.                <td>  
  17.                    <%= Convert.ToDateTime(Html.Encode(item.sendTime)).ToShortDateString() %>  
  18.                      
  19.                    </div>  
  20.                </td>  
  21.            </tr>  
  22.            <% } %>  

  这些简单的操作会用之后,做一个简单的留言板就没有问题了。后面我们还会对一些实际应用和一些其它的方法,进行说明
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值