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

首先需要在项目中新增一个 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();




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值