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

原创 2012年03月29日 15:39:32

  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之前,我们必须实例化一下我们建立的数据模型,

  

  NewETrainEntities newEtrain = new NewETrainEntities();

  添加操作

  

/// <summary>
        /// 添加操作
        /// </summary>
        /// <returns></returns>
        public ActionResult CreateSave()
        {
            //成功失败的标记
            int flag = 1;

           
                try
                {
                    //这是对一个表Etrain_Announcement 的model进行定义
                    Etrain_Announcement e_ann = new Etrain_Announcement();

                    e_ann.schoolcode = Request.Form["hidschoolcode"].ToString();
                    e_ann.UserType = Request.Form["selIsapp"].ToString();
                    e_ann.contents = Request.Form["txtContents"].ToString();
                    e_ann.sendTime = DateTime.Now;
                    e_ann.createdate = DateTime.Now;
                    e_ann.modifydate = DateTime.Now;

                    newEtrain.AddToEtrain_Announcement(e_ann);
           
                    //这里要注意,必须要写这个,我一开始以为加上前面的方法add了就已经添加了,这样不会添加,要进行savachanges()才行
                    newEtrain.SaveChanges();
                }
                catch (Exception ex)
                {
                    flag = 0;
                }
           
            


            return Content(flag.ToString());
        }

  修改操作
  
 /// <summary>
        /// 修改操作
        /// </summary>
        /// <returns></returns>
        public ActionResult UpdateSave()
        {
            //成功失败的标记
            int flag = 1;

            try
                {
                    int annid = Convert.ToInt32(Request.Form["hidid"]);

                    var info = from ann in newEtrain.Etrain_Announcement
                               where ann.id == annid
                               select ann;

                    //关于这个我一直有一个不解,就是我的记录无论是一条还是多条,都必须用foreach来取。不知道有没有别的方法,可以直接取出一条记录

        foreach (var item in info)
                    {
                        item.contents = Request.Form["txtContents"];
                    }

                    newEtrain.SaveChanges();
                }
                catch (Exception ex)
                {
                    flag = 0;
                }
                

            return Content(flag.ToString());
        }


    删除操作

  

/// <summary>
        /// 删除公告
        /// </summary>
        /// <param name="id">公告ID</param>
        /// <returns></returns>
        public ActionResult DeleteInfo(string id)
        {
            //标记位
            int flag = 1;

            try
            {
                int annid = Convert.ToInt32(id);

                //这里被注掉的部分的是错误的写法,这里说明一下,我在刚开始用的时候,网上很多教程都是下面这个方法,可是你运行的时候,就会报错。
                //var info = from ann in newEtrain.Etrain_Announcement
                //where ann.id == annid
                //select ann;
     
      Etrain_Announcement info = newEtrain.Etrain_Announcement.First(p=>p.id==annid);

      //DeleteObject(object Entity)这里的值是一个object类型,可是你删除的最好传一个model否则就会出错
                newEtrain.DeleteObject(info); 
                newEtrain.SaveChanges(); 
             } 
             catch(Exception ex) 
             { 
                flag = 0; 
             } 
             return Content(flag.ToString()); 
         }

         列表显示操作

  

/// <summary>
        /// 公告列表显示
        /// </summary>
        /// <param name="id">学校标识</param>
        /// <returns></returns>
        public ActionResult adminIndex(string id)
        {
            ViewData["schoolcode"] = id;

            var annInfo = from ann in newEtrain.Etrain_Announcement
                          where ann.schoolcode == id
                          orderby ann.id descending
                          select ann;
          //这里我用了Take(20)这个操作,为得是显示最后20条信息,这里的Tak()就类似于top
    return View(annInfo.Take(20));
        }

 前台显示页面

  

 <% foreach (var item in Model)
               { %>
            <tr>
                <td>
                    <% if (Html.Encode(item.contents).Length > 10)
                       { %>
                    <a href="/Announcement/UserView/<%=Html.Encode(item.id) %>">
                        <%= Html.Encode(item.contents).Substring(0, 8)%>...</a>
                    <%}
                       else
                       { %>
                    <a href="/Announcement/UserView/<%=Html.Encode(item.id) %>">
                        <%= Html.Encode(item.contents)%></a>
                    <%} %>
                </td>
                <td>
                    <%= Convert.ToDateTime(Html.Encode(item.sendTime)).ToShortDateString() %>
                    
                    </div>
                </td>
            </tr>
            <% } %>

  这些简单的操作会用之后,做一个简单的留言板就没有问题了。后面我们还会对一些实际应用和一些其它的方法,进行说明

asp.net MVC + linq to Entity简单教程(五)linq to Entity中join的使用以及子查询

多表联查,可以说是我们写sql语句时最常用的一种方法。一般采用,内联(join),左联(left join),右联( right join)的方式。这里不多说了,想必大家也都了解。这里我要说的一点是在...
  • chenguang79
  • chenguang79
  • 2012年03月30日 21:45
  • 6751

asp.net MVC + linq to Entity简单教程(四)linq to Entity查询中其它方法的使用

在前面我们说到了,简单的列表显示,下面我们来介绍一下,一些其它的属性。   1, order by 的使用    在sql语句中,order by 语句是经常使用的。一般来说,它一般和top配对使...
  • chenguang79
  • chenguang79
  • 2012年03月29日 22:39
  • 5000

asp.net MVC + linq to Entity简单教程(一)MVC的建立与Entity的建立

最近在写一个项目,是一个用于手机浏览器浏览的一个校园办公的系统,主要是采用HTML5 + asp.net MVC进行编写的,平时在写程序的时候,很少用到MVC,一般都是用三层架构,因为MVC架构,生成...
  • chenguang79
  • chenguang79
  • 2012年03月27日 15:37
  • 5846

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

MVC的概念不多说,model + view + Controller 有人说这个和三层没有什么区别啊。也是分三层写的啊。MVC中model层我们真的没有做什么,基本就是建立数据模型,而control...
  • chenguang79
  • chenguang79
  • 2012年03月28日 11:36
  • 3109

Linq to Entity 增,删,改,查 语句

一、增 public void Insert(ExamineeDto item) { using (var ctx = new Personne...
  • tiz198183
  • tiz198183
  • 2013年12月18日 11:00
  • 1570

asp.net MVC + linq to Entity简单教程(一)MVC的建立与Entity的建立

最近在写一个项目,是一个用于手机浏览器浏览的一个校园办公的系统,主要是采用HTML5 + asp.net MVC进行编写的,平时在写程序的时候,很少用到MVC,一般都是用三层架构,因为MVC架构,生成...
  • qq_16518567
  • qq_16518567
  • 2014年09月22日 15:49
  • 266

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

MVC的概念不多说,model + view + Controller 有人说这个和三层没有什么区别啊。也是分三层写的啊。MVC中model层我们真的没有做什么,基本就是建立数据模型,而control...
  • qq_16518567
  • qq_16518567
  • 2014年09月22日 15:48
  • 287

AspNet MVC4 教学-19:Asp.Net MVC4 利用Linq技术的搜索应用快速Demo

Asp.Net MVC4 利用Linq技术的搜索应用快速Demo
  • vinglemar
  • vinglemar
  • 2015年05月26日 16:47
  • 1204

Linq To Entity多条件or查询处理

1.多条件OR使用实例: //学费 if (string.IsNullOrEmpty(tuition) == false && tuition != "0") { Expression>...
  • u011127019
  • u011127019
  • 2016年07月11日 14:20
  • 1583

使用Linq中的Distinct方法对序列进行去重操作

使用Linq提供的扩展方法Distinct可以去除序列中的重复元素。 该方法具有以下两种重载形式: (1)public static IEnumerable Distinct(this IEnumer...
  • tiana0
  • tiana0
  • 2014年06月21日 17:07
  • 8181
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:asp.net MVC + linq to Entity简单教程(三)linq to Entity的基本操作
举报原因:
原因补充:

(最多只允许输入30个字)