Linq学习笔记四之linq to sql 的基本操作

来源:互联网 发布:win10 linux子系统界面 编辑:程序博客网 时间:2024/06/07 06:14

首先需要在项目中新增一个 linq  to sql 的服务

新增项,数据,LINQ TO sql 类的这个方法



第二步需要一个model类,用作映射

[Table]    public class S_ZDB    {      //每一个属性都需要加上[Column]         [Column]        public string ZDMC { get; set; }        [Column]        public string ZDLX { get; set; }
//下面这个属性是主键        [Column(IsPrimaryKey = true)]        public Guid ZDBH { get; set; }        [Column]        public DateTime CJRQ { get; set; }        [Column]        public string BZ { get; set; }    }

需要在类上面加上[Table]这个属性

做完这些就可以对数据库的值进行操作了

第一步获取配置文件的数据库属性

 public static string sqldata = ConfigurationManager.ConnectionStrings["sql"].ConnectionString;

第二步创建连接对象

   DataContext dt = new DataContext(sqldata);

接下来就是对数据库简单的增删改查

查询是最简单的

注意,没有进过转换的数据如Table<T>的数据,都是映射的

  Table<S_ZDB> TB = dt.GetTable<S_ZDB>();  IQueryable<S_ZDB> IQ = from i in dt.GetTable<S_ZDB>() select i;
如果需要转换成list<T>集合,直接这样就好了
 // List<S_ZDB> li = (from i in dt.GetTable<S_ZDB>() select i).ToList();

下面是对查询的拓展


            //查询部分数据            var ex = from i in dt.GetTable<S_ZDB>() select new { ZDMC = i.ZDMC };            var ex1 = TB.Select(i => new { ZDLX = i.ZDLX });            //查询第一条数据            var ex2 = TB.First();            //查询数据表单中的单个元素,如果出现多个则抛出异常,没有则返回null            //方法            序列为null时 序列不包含任何元素时 序列只包含一个元素时 序列包含多个元素时            //Single        引发异常     引发异常             返回该元素             引发异常            //SingleOrDefault 引发异常     返回default(TSource) 返回该元素           引发异常            //First         引发异常     引发异常            返回该元素           返回第一个元素            //FirstOrDefault 引发异常     返回default(TSource) 返回该元素             返回第一个元素            //Last             引发异常    引发异常             返回该元素             返回最后一个元素            //LastOrDefault 引发异常     返回default(TSource) 返回该元素           返回最后一个元素            var ex3 = TB.SingleOrDefault(p => p.ZDMC == "别墅" && p.ZDLX == "户型");            //查询的分页显示            //这里10表示每页显示数量,1代表页数 ,跳过数据,获取剩下的数据            List<S_ZDB> li1 = (li.Skip(10 * (1 - 1))).ToList();            //显示数据            List<S_ZDB> li2 = (li1.Take(10)).ToList();            //条件查询            var ex4 = from i in TB where i.ZDLX != "户型" select i;            //排序和分组查询            var ex5 = from i in TB orderby i.ZDLX select i;            //分组部分            var ex6 = from i in TB                      group i by i.ZDLX into LX                      orderby LX.Key                      select new                      {                          ZDLX = LX.Key,                          ZDMC = LX                      };            //循环展示分组结果            foreach (var mc in ex6)            {                Console.WriteLine("类型:{0}", mc.ZDLX);                foreach (S_ZDB Z in mc.ZDMC)                {                    Console.WriteLine("类型:{0}", Z.ZDMC);                }            }            //聚集,显示每个分组的数量            var ex7 = from i in TB                      group i by i.ZDLX into LX                      orderby LX.Key                      select new                      {                          ZDLX = LX.Key,                          ZDMC = LX.Count()                      };            //循环展示分组结果            foreach (var mc in ex7)            {                Console.WriteLine("类型:{0},数量:{1}", mc.ZDLX, mc.ZDMC);            }            //连接,多表查询            var ex8 = from i in TB                      join j in IQ on i.ZDMC equals j.ZDMC                      select new { i.ZDMC };            var ex9 = from i in TB                      from j in IQ                      where i.ZDMC == j.ZDMC                      select new { i.ZDMC };


//新增数据            S_ZDB s = new S_ZDB();            s.ZDMC = "2";            s.ZDLX = "资质等级";            s.ZDBH = new Guid("00000000-0000-0000-0000-000000000000");            s.CJRQ = DateTime.Now;            s.BZ = "wu";            //将新的数据添加到TB中;            TB.InsertOnSubmit(s);  //提交数据,因为数据是映射的关系,所有将数据提交可以直接修改            dt.SubmitChanges();

   //修改数据            //应为数据不完全无法插入数据库            var ex10 = from i in dt.GetTable<S_ZDB>()                       where i.ZDLX == "资质等级" && i.ZDMC == "2"                       select i;            foreach (S_ZDB i in ex10)            {                i.ZDMC = "1";            }            dt.SubmitChanges();            //提交数据

  //删除数据            TB.DeleteOnSubmit(S);            var zd = dt.GetTable<S_ZDB>().Select(i => i).Where(i => i.ZDMC == "2" && i.ZDLX == "资质等级");            var z = from i in TB where i.ZDMC == "2" && i.ZDLX == "资质等级" select i;            TB.DeleteAllOnSubmit(z);           //提交数据,因为数据是映射的关系,所有将数据提交可以直接修改            dt.SubmitChanges();




0 0