FreeSql 采用 ExpressionTree 優(yōu)化讀取速讀,如果懂技術(shù)的你一定知道 .NETCore 技術(shù)下除了原生代碼,最快就是 Emit 和
          ExpressionTree。

          項(xiàng)目在初期使用的反射+緩存,雖然 .NETCore 優(yōu)化了反射性能,但經(jīng)過與Dapper性能測(cè)試對(duì)比之后,發(fā)現(xiàn)仍然有一定差距,改成
          ExpresstionTree 后才與 Dapper 性能相當(dāng)。

          FreeSql 支持的類型較多,實(shí)現(xiàn) ExpressionTree 的復(fù)雜度較大,有興趣的朋友可以翻閱源代碼。
          IFreeSql fsql = new FreeSql.FreeSqlBuilder()
          .UseConnectionString(FreeSql.DataType.MySql, "Data
          Source=127.0.0.1;Port=3306;User ID=root;Password=root;Initial
          Catalog=cccddd;Charset=utf8;SslMode=none;Max pool size=10") .Build();
          [Table(Name = "tb_topic")] class Topic { [Column(IsIdentity = true, IsPrimary =
          true)] public int Id { get; set; } public int Clicks { get; set; } public int
          TestTypeInfoGuid { get; set; } public TestTypeInfo Type { get; set; } public
          string Title { get; set; } public DateTime CreateTime { get; set; } } class
          TestTypeInfo { public int Guid { get; set; } public int ParentId { get; set; }
          public TestTypeParentInfo Parent { get; set; } public string Name { get; set; }
          } class TestTypeParentInfo { public int Id { get; set; } public string Name {
          get; set; } } ISelect<Topic> select => fsql.Select<Topic>();
          返回單條記錄
          Topic t1 = select.Where(a => a.Id == 1).ToOne();
          FreeSql有一個(gè)約定,ToOne 永遠(yuǎn)返回 null 或 有數(shù)據(jù)的實(shí)體對(duì)象,ToList 永遠(yuǎn)返回非 null 的 List<實(shí)體類型>

          返回 List
          List<Topic> t1 = select.Where(a => a.Id > 0).Skip(100).Limit(200).ToList();
          返回 List + 導(dǎo)航屬性的數(shù)據(jù)
          List<Topic> t2 = select.LeftJoin(a => a.Type.Guid ==
          a.TestTypeInfoGuid).ToList(); //此時(shí)會(huì)返回普通字段 + 導(dǎo)航對(duì)象 Type 的數(shù)據(jù)
          指定字段返回
          //返回一個(gè)字段 List<int> t3 = select.Where(a => a.Id > 0).ToList(a => a.Id); //返回匿名類
          List<匿名類> t4 = select.Where(a => a.Id > 0).ToList(a => new { a.Id, a.Title });
          //返回元組 List<(int, string)> t5 = select.Where(a => a.Id > 0).ToList<(int,
          string)>("id, title"); //返回指定映射字段 List<(int, string)> t6 = select.Where(a =>
          a.Id > 0).ToList<Dto>(); //返回SQL字段 List<匿名類> t7 = select.Where(a => a.Id >
          0).Skip(100).Limit(200) .ToList(a => new { a.Id, a.Title, cstitle =
          "substr(a.title, 0, 2)", //將 substr(a.title, 0, 2) 作為查詢字段 csnow =
          Convert.ToDateTime("now()"), //將 now() 作為查詢字段 //奇思妙想:怎么查詢開窗函數(shù)的結(jié)果 });
          //返回更為復(fù)雜的結(jié)構(gòu) List<匿名類> t8 = select.From<TestTypeInfo, TestTypeParentInfo>((s, b,
          c) => s .InnerJoin(a => a.TypeGuid == b.Guid) .LeftJoin(a => c.Id ==
          b.ParentId) .Where(a => b.Name != "xxx")).ToList((a, b, c) => new { a.Id,
          a.Title, a.Type, ccc = new { a.Id, a.Title }, tp = a.Type, tp2 = new { a.Id,
          tp2 = a.Type.Name }, tp3 = new { a.Id, tp33 = new { a.Id } } });
          執(zhí)行SQL
          class xxx { public int Id { get; set; } public string Path { get; set; }
          public string Title2 { get; set; } } List<xxx> t9 = fsql.Ado.Query<xxx>("select
          * from song"); List<(int, string ,string)> t10 = fsql.Ado.Query<(int, string,
          string)>("select * from song"); List<dynamic> t11 =
          fsql.Ado.Query<dynamic>("select * from song");
          巧用AsTable
          var t12 = fsql.Select<User>() .AsTable((a, b) => "(select * from tb_topic
          where clicks > 10)") .Page(1, 10).ToList()
          ToChunk

          執(zhí)行查詢,分塊返回?cái)?shù)據(jù),可減少內(nèi)存開銷。比如讀取10萬條數(shù)據(jù),每次返回100條處理。
          var testlist1 = fsql.Select<Song>().OrderBy(a => a.Id).ToList(); var testlist2
          = new List<Song>(); fsql.Select<Song>().OrderBy(a => a.Id).ToChunk(100, list =>
          { testlist2.AddRange(list); }); //這里示范,最終 testlist1 與 testlist2 返回的數(shù)據(jù)相同。
          API

          方法 返回值 參數(shù) 描述
          ToSql string 返回即將執(zhí)行的SQL語句
          ToList List 執(zhí)行SQL查詢,返回 T1 實(shí)體所有字段的記錄,若存在導(dǎo)航屬性則一起查詢返回,記錄不存在時(shí)返回 Count 為 0 的列表
          ToList<Dto> List<Dto> Lambda 執(zhí)行SQL查詢,返回指定字段或Dto映射的記錄,記錄不存在時(shí)返回 Count 為 0 的列表
          ToList<T> List<T> string field 執(zhí)行SQL查詢,返回 field
          指定字段的記錄,并以元組或基礎(chǔ)類型(int,string,long)接收,記錄不存在時(shí)返回 Count 為 0 的列表
          ToOne T1 執(zhí)行SQL查詢,返回 T1 實(shí)體所有字段的第一條記錄,記錄不存在時(shí)返回 null
          ToChunk <空> int size, Action<List<T1>> done
          執(zhí)行SQL查詢,分塊返回?cái)?shù)據(jù),可減少內(nèi)存開銷。比如讀取10萬條數(shù)據(jù),每次返回100條處理。
          Any bool 執(zhí)行SQL查詢,是否有記錄
          Sum T Lambda 指定一個(gè)列求和
          Min T Lambda 指定一個(gè)列求最小值
          Max T Lambda 指定一個(gè)列求最大值
          Avg T Lambda 指定一個(gè)列求平均值
          系列文章導(dǎo)航

          *
          (一)入門 <https://www.cnblogs.com/FreeSql/p/11531300.html>

          *
          (二)自動(dòng)遷移實(shí)體 <https://www.cnblogs.com/FreeSql/p/11531301.html>

          *
          (三)實(shí)體特性 <https://www.cnblogs.com/FreeSql/p/11531302.html>

          *
          (四)實(shí)體特性 Fluent Api <https://www.cnblogs.com/FreeSql/p/11531304.html>

          *
          (五)插入數(shù)據(jù) <https://www.cnblogs.com/FreeSql/p/11531306.html>

          *
          (六)批量插入數(shù)據(jù) <https://www.cnblogs.com/FreeSql/p/11531309.html>

          *
          (七)插入數(shù)據(jù)時(shí)忽略列 <https://www.cnblogs.com/FreeSql/p/11531316.html>

          *
          (八)插入數(shù)據(jù)時(shí)指定列 <https://www.cnblogs.com/FreeSql/p/11531318.html>

          *
          (九)刪除數(shù)據(jù) <https://www.cnblogs.com/FreeSql/p/11531320.html>

          *
          (十)更新數(shù)據(jù) <https://www.cnblogs.com/FreeSql/p/11531321.html>

          *
          (十一)更新數(shù)據(jù) Where <https://www.cnblogs.com/FreeSql/p/11531324.html>

          *
          (十二)更新數(shù)據(jù)時(shí)指定列 <https://www.cnblogs.com/FreeSql/p/11531327.html>

          *
          (十三)更新數(shù)據(jù)時(shí)忽略列 <https://www.cnblogs.com/FreeSql/p/11531334.html>

          *
          (十四)批量更新數(shù)據(jù) <https://www.cnblogs.com/FreeSql/p/11531335.html>

          *
          (十五)查詢數(shù)據(jù) <https://www.cnblogs.com/FreeSql/p/11531339.html>

          *
          (十六)分頁(yè)查詢 <https://www.cnblogs.com/FreeSql/p/11531341.html>

          *
          (十七)聯(lián)表查詢 <https://www.cnblogs.com/FreeSql/p/11531346.html>

          *
          (十八)導(dǎo)航屬性 <https://www.cnblogs.com/FreeSql/p/11531352.html>

          *
          (十九)多表查詢 <https://www.cnblogs.com/FreeSql/p/11531362.html>

          *
          (二十)多表查詢 WhereCascade <https://www.cnblogs.com/FreeSql/p/11531372.html>

          *
          (二十一)查詢返回?cái)?shù)據(jù)

          *
          (二十二)Dto 映射查詢 <https://www.cnblogs.com/FreeSql/p/11531381.html>

          *
          (二十三)分組、聚合 <https://www.cnblogs.com/FreeSql/p/11531384.html>

          *
          (二十四)Linq To Sql 語法使用介紹 <https://www.cnblogs.com/FreeSql/p/11531392.html>

          *
          (二十五)延時(shí)加載 <https://www.cnblogs.com/FreeSql/p/11531395.html>

          *
          (二十六)貪婪加載 Include、IncludeMany、Dto、ToList
          <https://www.cnblogs.com/FreeSql/p/11531404.html>

          *
          (二十七)將已寫好的 SQL 語句,與實(shí)體類映射進(jìn)行二次查詢
          <https://www.cnblogs.com/FreeSql/p/11531416.html>

          *
          (二十八)事務(wù) <https://www.cnblogs.com/FreeSql/p/11531423.html>

          *
          (二十九)Lambda 表達(dá)式 <https://www.cnblogs.com/FreeSql/p/11531425.html>

          *
          (三十)讀寫分離 <https://www.cnblogs.com/FreeSql/p/11531430.html>

          *
          (三十一)分區(qū)分表 <https://www.cnblogs.com/FreeSql/p/11531435.html>

          *
          (三十二)Aop <https://www.cnblogs.com/FreeSql/p/11531471.html>

          *
          (三十三)CodeFirst 類型映射 <https://www.cnblogs.com/FreeSql/p/11531543.html>

          *
          (三十四)CodeFirst 遷移說明 <https://www.cnblogs.com/FreeSql/p/11531550.html>

          *
          (三十五)CodeFirst 自定義特性 <https://www.cnblogs.com/FreeSql/p/11531576.html>

          友情鏈接
          ioDraw流程圖
          API參考文檔
          OK工具箱
          云服務(wù)器優(yōu)惠
          阿里云優(yōu)惠券
          騰訊云優(yōu)惠券
          京東云優(yōu)惠券
          站點(diǎn)信息
          問題反饋
          郵箱:[email protected]
          QQ群:637538335
          關(guān)注微信

                国产粉嫩嫩00在线 | 草比网 | WWW.逼日逼 | 啊好爽好舒服 | 精品人人 |