SQLSugar仅供学习

using SqlSugar;
using Sugar.Enties;
using SugarContext;
using System;
using System.Collections.Generic;
using System.Diagnostics;

namespace SugarCore
{
    class Program
    {
        static SugarDbContext sugar = new SugarDbContext();
        static void Main(string[] args)
        {
            var db = sugar.Db;
            var queryable = db.Queryable<Student>();
            //拼接会比EF方便些,不像EF需要queryable+=
            queryable.Where(it => it.StudentName.Contains("陈"));
            queryable.Where(it => it.StudentSex == "女");
            //防止queryable相互影响我们用clone解决
            var StudentName = queryable.Clone().Select(it => it.StudentName).First();
            /正确答案是两条数据 如果去掉Clone,受上面一条影响,只会有一条数据
            var list = queryable.Clone().ToList();//正确答案是两条数据 如果去掉Clone,受上面一条影响,只会有一条数据
            ///案例1: WhereIF函数
            ///根据条件判段是否执行过滤,我们可以用WhereIf来实现,true执行过滤,false则不执行
            ///
            var a = "陈";
            var b = "飞";
            var c = "女";
            ///陈性女同学一个
            var list2 = db.Queryable<Student>()
    .WhereIF(!string.IsNullOrEmpty(a), it => it.StudentName.StartsWith(a))
    .WhereIF(!string.IsNullOrEmpty(b), it => it.StudentName.EndsWith(b))
    .WhereIF(!string.IsNullOrEmpty(c), it => it.StudentSex == c).ToList();
            //

            ///所有叫陈飞的童鞋9人   string.IsNullOrEmpty(c) 这个语句不会执行
            var list3 = db.Queryable<Student>()
    .WhereIF(!string.IsNullOrEmpty(a), it => it.StudentName.StartsWith(a))
    .WhereIF(!string.IsNullOrEmpty(b), it => it.StudentName.EndsWith(b))
    .WhereIF(string.IsNullOrEmpty(c), it => it.StudentName == c).ToList();


            ///
            /*
             案例2.:MergeTable 函数 4.4
             是将多表查询的结果Select里的内容变成一张表, 如果是多表查询的时候,我们无论是使用 where 还是 orderBy 都需要加别名,这样我们就不能实现动态排序,因为我不知道别名叫什么, 可以用MergeTable解决这个问题
             */
            ///多表查询方式
            var pageJoin = db.Queryable<Student, StudentGrad>((st, sc) => new object[]
                {
                  JoinType.Inner, st.GradID == sc.GradID
                })
                .Where(st => st.StudentName.EndsWith("芬"))//别名是st
                .OrderBy("st.StudentName asc")//别名是sc
                .Select((st, sc) => new { StudentName = st.StudentName, gradeName = sc.GradName })
                .ToList();

            ///等同于MergeTable 方式
            ///
            var pageJoin_2 = db.Queryable<Student, StudentGrad>((st, sc) => new object[]
                                {
                                    JoinType.Inner,st.GradID==sc.GradID
                                })
                                .Select((st, sc) => new
                                {
                                    StudentName = st.StudentName,
                                    gradeName = sc.GradName
                                })
                                .MergeTable()
                                .Where(A => A.StudentName.EndsWith("芬")).OrderBy("StudentName asc").ToList();//别名不限


            ///案例3: SqlQueryable 4.5.2.5 , 可以方便的把SQL变成表来操作 直接执行SQL语句
            ///
            var t12 = db.SqlQueryable<Student>("select * from student").ToPageList(1, 2);

            ///案例4: 将表单组装成 List<ConditionalModel>实现查询 4.5.9
            ///查询女生中 带有 飞 子的同学
            List<IConditionalModel> conModels = new List<IConditionalModel>();
            conModels.Add(new ConditionalModel() { FieldName = "StudentSex", ConditionalType = ConditionalType.Equal, FieldValue = "女" });
            conModels.Add(new ConditionalModel() { FieldName = "StudentName", ConditionalType = ConditionalType.Like, FieldValue = "飞" });
            var student = db.Queryable<Student>().Where(conModels).ToList();

            ///
            //4.6.4.4 版本支持了 复杂的OR 
            // and StudentSex='女' And (StudentName='陈芬' or StudentName='王芬' Or StudentName='李芬') 
            List<IConditionalModel> conModels__22 = new List<IConditionalModel>();
            conModels__22.Add(new ConditionalModel() { FieldName = "StudentSex", ConditionalType = ConditionalType.Equal, FieldValue = "女" });
            conModels__22.Add(new ConditionalCollections()
            {
                ConditionalList =
            new List<KeyValuePair<WhereType, SqlSugar.ConditionalModel>>()
            {
    new  KeyValuePair<WhereType, ConditionalModel>
    ( WhereType.And , //And
    new ConditionalModel() { FieldName = "StudentName", ConditionalType = ConditionalType.Equal, FieldValue = "陈芬" }),
    new  KeyValuePair<WhereType, ConditionalModel>
    (WhereType.Or,
    new ConditionalModel() { FieldName = "StudentName", ConditionalType = ConditionalType.Equal, FieldValue = "王芬" }),
    new  KeyValuePair<WhereType, ConditionalModel>
    ( WhereType.Or,
    new ConditionalModel() { FieldName = "StudentName", ConditionalType = ConditionalType.Equal, FieldValue = "李芬" })
            }
            });
            var studentResult = db.Queryable<Student>().Where(conModels__22).ToList();


            ///案例5: 拼接拉姆达 4.5.9.8
            ///
            var exp = Expressionable.Create<Student>()
      .OrIF(1 == 1, it => it.StudentSex == "女")
      .And(it => it.StudentName.Contains("陈"))
      .AndIF(2 == 3, it => SqlFunc.IsNullOrEmpty(it.StudentName)) //此where 不执行
      .Or(it => it.StudentName.Contains("飞")).ToExpression();//拼接表达式

            var list55 = db.Queryable<Student>().Where(exp).ToList();


            ///Queryable是支持字符串与拉姆达混用或者纯字符串拼接模式,可以满足复杂的一些需求
            ///复杂动态 表达式和SQL子查询混合模式
            ///
            例子1:

               var queryable = db.Queryable<Student>("t");

               queryable.Where("t.id in (select id from xxx)");

               queryable.Where(it => it.Id == 1);

               //更多操作拼接qureyable  

               var result = queryable.Select(@"
                     id,
                     name,
                     (select name form school where shoolid=t.id) as schoolName
                      ").ToList();


            例子2:

               dynamic join3 = db.Queryable("Student", "st")
                       .AddJoinInfo("School", "sh", "sh.id=st.schoolid")
                       .Where("st.id>@id")
                       .AddParameters(new { id = 1 })
                       .Select("st.*").ToList(); //也可以Select<T>(“*”).ToList()返回实体集合


            例子3:

               var list = db.Queryable<Student>().
                               Select(it => new Student()
                               {
                                   Name = it.Name,
                                   Id = SqlFunc.MappingColumn(it.Id, "(select top 1 id from school)") // 动态子查询
                   }).ToList();

            ///安全拼SQL
            ///安全拼SQL 安全拼SQL 安全拼SQL 安全拼SQL 安全拼SQL 安全拼SQL 安全拼SQL 安全拼SQL 安全拼SQL
                       安全拼SQL
            使用参数化过滤

            private static void Where()
                       {
                           var db = GetInstance();
                           string value = "'jack';drop table Student";
                           var list = db.Queryable<Student>().Where("name=@name", new { name = value }).ToList();
                           //没有发生任何事情
                       }


                       字段是无法用参数化实现的,我们就可以采用这种方式过滤

            private static void OrderBy()
                       {
                           var db = GetInstance();
                           try
                           {
                               var propertyName = "Id'"; //类中的属性的名称
                               var dbColumnName = db.EntityProvider.GetDbColumnName<Student>(propertyName);
                               var list2 = db.Queryable<Student>().OrderBy(dbColumnName).ToList();
                           }
                           catch (Exception ex)
                           {
                               Console.WriteLine(ex.Message);
                           }
                       }
            Console.ReadLine();
        }
    }


    class ViewModel
    {   
        public string StudentName { get; set; }  
        public string GradName { get; set; }
    }
    class StuModel
    {
        public string StudentName { get; set; }
        public string StuSex { get; set; }
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
你好!关于学习SqlSugar,你可以按照以下步骤进行: 1. 了解SqlSugarSqlSugar是一款基于ADO.NET的ORM框架,为.NET平台提供了方便的数据库操作功能。它支持多种数据库类型(如SQL Server、MySQL、Oracle等)且易于使用。 2. 安装SqlSugar:你可以通过NuGet包管理器在Visual Studio中安装SqlSugar。在项目中右击,选择“管理NuGet程序包”,然后搜索并安装SqlSugar。 3. 配置数据库连接:在使用SqlSugar之前,你需要配置数据库连接。可以在项目的配置文件(如app.config或web.config)中添加数据库连接字符串,或者在代码中直接配置。 4. 创建实体类:在使用SqlSugar时,你需要创建与数据库表对应的实体类。实体类的属性应与数据库表的字段一一对应。 5. 执行基本操作:使用SqlSugar,你可以执行各种数据库操作,如插入、更新、删除和查询等。通过SqlSugar提供的API,你可以轻松地执行这些操作。 6. 使用Linq操作:SqlSugar还提供了强大的Linq查询功能,可以使用类似SQL的语法进行数据查询和筛选。 7. 高级功能:除了基本操作和Linq查询,SqlSugar还提供了一些高级功能,如事务处理、分页查询、存储过程调用等。 8. 学习资源:可以参考官方文档和示例代码来学习SqlSugar的更多功能和用法。你还可以查阅相关的博客、论坛和视频教程,加深对SqlSugar的理解和应用。 希望这些步骤能帮助你开始学习SqlSugar!如果你有任何进一步的问题,我会很乐意帮助你。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山林恩泽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值