asp.net MVC+ LINQ to Entities简单添加,修改,删除,显示,子查询

最近一个项目用到asp.net MVC来做,但是数据模型还是采用的是ado.net,在项目完结之时,自己就多看了一下MVC,发现 MVC很多人都在使用EF做为数据模型,自己也就试着写一下,我用EF做数据模型,用linq to Entities来进行操作.下面是自己总结的一些简单操作.

添加操作:

  

[csharp]  view plain copy
  1. //这是我一个EF  
  2. 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.                     //这是对一个表的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.                    foreach (var item in info)  
  18.                    {  
  19.                        item.contents = Request.Form["txtContents"];  
  20.                    }  
  21.   
  22.                    newEtrain.SaveChanges();  
  23.                }  
  24.                catch (Exception ex)  
  25.                {  
  26.                    flag = 0;  
  27.                }  
  28.                  
  29.             
  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.                 newEtrain.DeleteObject(info);   
  23.                 newEtrain.SaveChanges();   
  24.              }   
  25.              catch(Exception ex)   
  26.              {   
  27.                 flag = 0;   
  28.              }   
  29.              return Content(flag.ToString());   
  30.          }  

显示操作:

    显示操作这里多说两句,显示操作分为二种情况,一种是对于单表的显示,就是一个表的显示,是比较简单的,请看下面代码:

[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条信息  
  15.     return View(annInfo.Take(20));  
  16.         }  

前台显示也比较简单

[html]  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.            <% } %>  

另一种情况,就是多表查询的时候,这种情况我们一般用得也比较多,就是不是一个独立的表这怎么办呢.其中一种就是表之间有关联,可是如果我没有设置关联怎么办呢.我用的方法比较笨,就是新建一个model.cs文件,把要的字段放进去.然后进行处理,程序如下:

[csharp]  view plain copy
  1. /// <summary>  
  2.         /// 页面列表显示  
  3.         /// </summary>  
  4.         /// <param name="schoolcode">学校标识</param>   
  5.         /// <returns></returns>  
  6.         public ActionResult List(string schoolcode)  
  7.         {  
  8.   
  9.               
  10.   
  11.             var smsMould = from sm in newEtrain.ETrain_smsMould  
  12.                            join smt in newEtrain.ETrain_smsMouldType on sm.typeID equals smt.typeID   
  13.                            join tea in newEtrain.ETrain_teachers on sm.userID equals tea.teach_id   
  14.                            where sm.schoolCode == schoolcode && sm.userType=="T"  
  15.                            orderby sm.id descending  
  16.                            //注意这里的myEtrain_smsMould就是我自己写的一个model.cs文件  
  17.                            select new myEtrain_smsMould  
  18.                            {  
  19.                                ID = sm.id,  
  20.                                typeName = smt.typeName,  
  21.                                mouldContent = sm.mouldContent,  
  22.                                userID = sm.userID,  
  23.                                teacherName = tea.teach_name,  
  24.                                isApproval = sm.isApproval  
  25.                            };  
  26.   
  27.   
  28.   
  29.             return View(smsMould);   
  30.         }  

前台不用,不过有一点要注意的是前台的

[html]  view plain copy
  1. <%@ Page Language="C#" MasterPageFile="~/Views/Home/Main.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<_3GEtrain.Models.myEtrain_smsMould>>" %>  
[html]  view plain copy
  1. Inherits="System.Web.Mvc.ViewPage<IEnumerable<_3GEtrain.Models.myEtrain_smsMould>>//这里的名字一定是你定义的类别  

这个显示中还有一个join的方法,是用的多表链接,这里有一个问题 就是 linq to Entities中没有左连接,而且3.5版的还没有DefaultIfEmpty().哪位朋友有好的方法,告诉我一下.


下面是一个子查询的例子.也很简单,不多说,上代码

[csharp]  view plain copy
  1. /// <summary>  
  2.         /// 班级订购人数统计  
  3.         /// </summary>  
  4.         /// <param name="id"></param>  
  5.         /// <returns></returns>  
  6.         public ActionResult ClassRegNum(string id)  
  7.         {  
  8.             var info = from sc in newEtrain.ETrain_school_class  
  9.                        join grade in newEtrain.ETrain_grade on sc.grade_id equals grade.grade_id  
  10.                        where sc.schoolcode == id  
  11.                        orderby sc.grade_id, sc.class_id  
  12.                        select new ClassRegNum  
  13.                        {  
  14.                            grade_class = grade.grade_name + sc.class_Alias,  
  15.                            StudentNum = (from stu in newEtrain.ETrain_stu_class where stu.class_id == sc.class_id && stu.schoolcode == id && stu.grade_id == sc.grade_id select stu).Count(),  
  16.                            RegSum = (from stuc in newEtrain.ETrain_stu_class  
  17.                                      join k in newEtrain.ETrain_stu_kindred on stuc.stu_id equals k.stu_id  
  18.                                      join reg in newEtrain.reg_sms_user on k.parent_mobile equals reg.mobile_number  
  19.                                      where stuc.schoolcode == id && stuc.grade_id == sc.grade_id && stuc.class_id == sc.class_id && reg.reg_type == 1  
  20.                                      select stuc).Count()  
  21.                        };  
  22.   
  23.             return View(info);  
  24.         }  

这个代码,虽然有一点乱,但是仔细看,还是很简单的.呵.........
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值