• link to ef增删改查


    1,我建立了两张表,T_StuInfo,和T_Class,前者的classid是后者的外键。

    2,下面是补充的link to sql操作

    补充的link to sql
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data.Linq;
    using System.Xml.Linq;
    using System.Data.Objects;
    
    namespace Console1
    {
        class Program
        {
            static void Main(string[] args)
            {
    
                //创建数据库实体
                using (studentEntities stuEntity = new studentEntities())
                {
                    #region 使用ObjectQuery的返回执行的sql语句               
                    
                    //ObjectQuery<T_StuInfo> stuinfo = stuEntity.T_StuInfo;//对概念性模型的类型化查询
                    //IQueryable<T_StuInfo> stu1 = from c in stuinfo
                    //                             select c;
    
                    //Console.WriteLine(stu1.Count()); //输出数据个数
                    //Console.WriteLine(stuinfo.ToTraceString());//输出对数据源执行的命令            
    
                    #endregion
    
                    #region 条件限制
                    //ObjectQuery<T_StuInfo> stuinfo = stuEntity.T_StuInfo;//得到查询对象
                    //IQueryable<T_StuInfo> stu1 = from c in stuinfo      //查询结果放进IQueryable中
                    //                             where c.stuid < 5
                    //                             select c;
                    //Console.WriteLine(stu1.Count());
                    //foreach(var c in stu1)
                    //{
                    //    Console.WriteLine("姓名:{0},电话:{1}",c.name,c.phone);
                    //}
    
                    //var stu2 = stuEntity.T_StuInfo.Where(c=>c.name =="王金河7");//使用表的where直接查询
                    //Console.WriteLine(stu2.Count());
                    //foreach(var c in stu2)
                    //{
                    //    Console.WriteLine("姓名:{0},电话:{1}",c.name,c.phone);
                    //}
    
                    #endregion
    
                    #region 排序和分页
                    //ObjectQuery<T_StuInfo> stuinfo = stuEntity.T_StuInfo;
                    //IQueryable<T_StuInfo> stu1 = (from c in stuinfo
                    //                              orderby c.stuid   //分页必须排序
                    //                              select c).Skip(4).Take(4);
                    //Console.WriteLine(stu1.Count());
                    //foreach (var c in stu1)
                    //{
                    //    Console.WriteLine("姓名:{0},电话:{1}", c.name, c.phone);
                    //}
    
                    ////基于方法的查询语法
                    //var stu2 = stuEntity.T_StuInfo.OrderBy(c => c.stuid).Skip(4).Take(4);
                    //Console.WriteLine(stu2.Count());
                    //foreach (var c in stu2)
                    //{
                    //    Console.WriteLine("姓名:{0},电话:{1}", c.name, c.phone);
                    //}
                  
                    #endregion
    
                    #region 聚合:运算符有Average、Count、Max、Min 和 Sum
                    //var maxstuid = stuEntity.T_StuInfo.Max(p => p.stuid);//得到最大的学号
                    //var minstuid = stuEntity.T_StuInfo.Min(p => p.stuid);//得到最小的学号
                    //var count = stuEntity.T_StuInfo.Count();//得到所有学生的个数
                    //var sum = stuEntity.T_StuInfo.Sum(p => p.stuid);//得到所有的学号和
                    //var average1 = stuEntity.T_StuInfo.Average(p=>p.stuid);//得到学号的平均值
                    //double average2 =(double) sum / count;
    
                    //Console.WriteLine("学号最大值:{0},最小值:{1},总和:{2},个数:{3},聚合平均值:{4},求值平均值:{5}",
                    //    maxstuid, minstuid, sum, count, average1, average2);             
    
                    #endregion
    
                    #region 连接
                    //接有Join 和 GroupJoin 方法。GroupJoin组联接等效于左外部联接,
                    //它返回第一个(左侧)数据源的每个元素(即使其他数据源中没有关联元素)
                   
                    //var query = from d in stuEntity.T_StuInfo
                    //            join cls in stuEntity.T_Class   //连接到另一个表
                    //            on d.classid equals cls.classid //连接条件
                    //            where d.stuid < 10
                    //            select new                      //匿名类得到结果
                    //            {
                    //                StuId = d.stuid,
                    //                StuName = d.name,
                    //                Phone = d.phone,
                    //                ClassId= d.classid,
                    //                ClassName = cls.name                
                    //            };
                    //foreach (var q in query)
                    //{
                    //    Console.WriteLine("学号:{0},姓名:{1},电话:{2},班级:{3}", q.StuId, q.StuName, q.Phone, q.ClassName);
                    //}            
                  
                   
                    #endregion
                    #region 排序信息丢失
                    //如果在排序操作之后执行了任何其他操作,则不能保证这些附加操作中会保留排序结果。
                    //这些操作包括 Select 和 Where 等。
                    //另外,采用表达式作为输入参数的 First 和 FirstOrDefault 方法不保留顺序。
                    //如下代码,并不一定能实现降序排序
                    //IQueryable<T_StuInfo> stuinfo = stuEntity.T_StuInfo.OrderByDescending(c => c.stuid)
                    //   .Where(c => c.name != null).Select(c => c);
    
                    //foreach (var c in stuinfo)
                    //{
                    //    Console.WriteLine("学号:{0},姓名:{1}", c.stuid, c.name);
                    //}
    
                    #endregion
    
                    #region 不支持引用非标量闭包
                    //不支持在查询中引用非标量闭包(如实体)。在执行这类查询时,会引发 NotSupportedException 
                    //异常,并显示消息“无法创建类型为“结束类型”的常量值。
                    //此上下文中仅支持基元类型(如 Int32、String 和 Guid)
    
                    //T_StuInfo stu = stuEntity.T_StuInfo.FirstOrDefault();
                    //IQueryable<string> cc = from c in stuEntity.T_StuInfo
                    //                        where c == stu
                    //                        select c.name;
                    //foreach (string name in cc)
                    //    Console.WriteLine(name);
    
    
                    #endregion
    
                    Console.WriteLine("OK");
                    Console.Read();
                }
            
    
    
            }
         
        }
    }

    3,下面是对他的操作。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data.Linq;
    using System.Xml.Linq;
    
    namespace Console1
    {
        class Program
        {
            static void Main(string[] args)
            {
    
                //创建数据库实体
                using (studentEntities stuEntity = new studentEntities())
                {
                
    
                    #region 增加数据(构造对象,AddObject,SaveChanges)
    
                    //T_StuInfo stu1 = new T_StuInfo()
                    //{
                    //    name = "李四",//构造函数赋值时为逗号
                    //    phone="12456777",
                    //    classid=2
                    //};//构造函数体外面为分号
                    //T_StuInfo stu2 = new T_StuInfo();
                    //stu2.name = "王五";
                    //stu2.phone = "124";
                    //stu2.classid = 2;
                    ////将实体stu添加到数据库实体对象中
                    //stuEntity.T_StuInfo.AddObject(stu1);//将对象添加到当前实体集的上下文中
                    //stuEntity.T_StuInfo.AddObject(stu2);
                    //stuEntity.SaveChanges();//保存对数据库的修改            
    
                 
                    #endregion
    
                    #region 查询1:一般查询,查询所有数据(一条select from语句搞定)
                    //var result = from u in stuEntity.T_StuInfo //假设u是表中的一行
                    //             select u;//把这一行选择出来
                    //foreach (var item in result) //迭代
                    //{
                    //    Console.WriteLine("ID:{0,2},姓名:{1,5},电话:{2,10},班级ID:{3}", item.stuid, item.name, item.phone, item.classid);
                        
                    //}            
    
                    #endregion
    
                    #region 查询2:使用ToList防止延迟加载,拆分子查询(select from后ToList)
                    //这个结果可以保存到服务器内存中
                    //var result1 = (from u in stuEntity.T_StuInfo
                    //               where u.classid == 2
                    //               select u).ToList<T_StuInfo>();//将数据督导集合中
                    //var result2 = (from u in result1
                    //               where u.name != "王金河"
                    //               select u);
                    //foreach (var item in result2)
                    //{
                    //    Console.WriteLine("ID:{0},姓名:{1},电话:{2},班级id:{3},班级名:{4}", item.stuid, item.name, item.phone, item.classid, item.T_Class.name);
                    //}//因为T_StuInfo的classid是T_Class的外键,可以使用item.T_Class.name关联查询
    
                    #endregion
    
                    #region 查询3:使用Where方法(lambda表达式)(将条件写到对象的where语句中)
                    //使用where泛型方法,要转入一个lambda表达式
                    //var result = stuEntity.T_StuInfo.Where<T_StuInfo>(t => t.classid == 2);
                    //foreach (var item in result)
                    //{
                    //    Console.WriteLine("id:{0},name:{1},phone:{2},classid:{3}", item.stuid, item.name, item.phone, item.classid);
    
                    //}            
    
                    #endregion
    
                    #region 查询4:Linq分页查询(调用对象的OrderBy排序,Skip跳过多少页,Take取出多少数据)
                    //要跳过多少页
                    //int skipPage;
                    ////每页两条数据
                    //int countPerPage = 2;
                    ////从跳过0页到跳过2页(输出第1-3页)
                    //for (skipPage = 0; skipPage <= 2; skipPage++)
                    //{
                    //    var result = stuEntity.T_StuInfo
                    //        .OrderBy(t => t.stuid) //分页必须排序
                    //        .Skip<T_StuInfo>(skipPage * countPerPage) //跳过制定页数
                    //        .Take<T_StuInfo>(countPerPage);//获取制定条数
                    //    Console.WriteLine("第{0}页:", skipPage + 1);
                    //    //输出查询结果(该页)
                    //    foreach (var item in result)
                    //    {
                    //        Console.WriteLine("id:{0},name:{1},phone:{2},classid:{3}", item.stuid, item.name, item.phone, item.classid);
    
                    //    }
                    //}
    
                    #endregion
    
                    #region 查询5:使用匿名类查询多个字段(select时new一个匿名类)
                    //var result = from p in stuEntity.T_StuInfo
                    //             where p.stuid < 5
                    //             select new { p.name, p.phone };//定义一个包含了name和phone的匿名类
                    //foreach (var item in result)
                    //{
                    //    Console.WriteLine("姓名:{0},电话:{1}.", item.name, item.phone);
                    //}          
    
                    #endregion
    
                    #region DataLoadOptions防止延迟加载
                    //使用 LoadWith 方法可指定应同时检索与主目标相关的哪些数据。 
                    ////使用DadaLoadOptions需要添加对System.Data.Linq的引用
                    
                    //DataLoadOptions dlo = new DataLoadOptions();//提供相关数据的立即加载或筛选
                    //dlo.LoadWith<T_StuInfo>(t => t.T_Class);//加载学生信息的同时加载班级信息
                    ////???????????此处有问题,找不到stuEntity.LoadOptions属性
                    //stuEntity.LoadOptions = dlo;
                    
                   #endregion
    
                    #region 修改1:修改1条记录(先查找,然后再修改)
                    //var result = from u in stuEntity.T_StuInfo
                    //             select u;//查询出所有的数据
                    ////这个方法一次只能取出一条记录,如果first方法返回空值则抛出异常
                    //var target = result.FirstOrDefault<T_StuInfo>(p => p.name == "王五");
                    //target.name = "刘洋司南";
                    //stuEntity.SaveChanges();//保存设置
    
                    #endregion
    
                    #region 修改2:修改多条记录(查出来多个数据,循环修改)
                    //var result = from u in stuEntity.T_StuInfo
                    //             select u;
                    ////使用循环方式修改所有查询到得记录
                    //foreach (var item in result)
                    //{
                    //    item.phone = "110";
                    //}
                    //stuEntity.SaveChanges();              
    
                    #endregion
    
                    #region 删除(先查找,然后用DeleteObject删除)
                    //var result = from u in stuEntity.T_StuInfo
                    //             where u.name == "刘洋司南"
                    //             select u;
                    ////删除所有查询记录
                    //foreach (var item in result)
                    //{
                    //    stuEntity.T_StuInfo.DeleteObject(item);
                    //}
                    //stuEntity.SaveChanges();
               
                    #endregion
    
                  
                    Console.WriteLine("Succeed");
                    Console.Read();
    
                }
    
            }
        }
    }



  • 相关阅读:
    Python 开发中easy_install的安装及使用
    Python 对象的深拷贝与浅拷贝 -- (转)
    Python 语言使用中遇到的问题汇总
    Python 源码学习之内存管理 -- (转)
    Python 对象模型 -- (转)
    Python3.3.3 安装(Linux系统)
    angular-file-upload API angular文件上传插件
    html5上传文件并监听进度
    angular 服务
    skrollr 中文教程
  • 原文地址:https://www.cnblogs.com/wang7/p/2636170.html
Copyright © 2020-2023  润新知