C# LLSQL快速查詢框架

来源:http://www.cnblogs.com/zhouliuyi/archive/2016/06/03/llsql.html
-Advertisement-
Play Games

介紹一種新類型查詢方法,類似linq,lambda語法,類似標準的sql使用習慣,支持匿名類型,泛型,目前支持mssql,mysql, 切換隻需要DatabaseConfig.DatabaseType = DatabaseType.SQLServer;無需改任何代碼,dll後續開放下載 使用說明:基 ...


介紹一種新類型查詢方法,類似linq,lambda語法,類似標準的sql使用習慣,支持匿名類型,泛型,目前支持mssql,mysql,

切換隻需要DatabaseConfig.DatabaseType = DatabaseType.SQLServer;無需改任何代碼,dll後續開放下載

使用說明:基於實體查詢,實體名和表名相同,實體需要使用代碼生成器生成,工具後續開放下載

只需要生成所有表的實體,其它數據任意查,不需要手寫任何Model, 

查詢結果

1     public class Student
2     {
3         public int ID { get; set; }
4         public string Name { get; set; }
5         public int Age { get; set; }
6         public bool IsGraduate { get; set; }
7         public string Grade { get; set; }
8         public decimal Money { get; set; }
9     }
表對應實體
  1         /// <summary>
  2         /// 單表查詢
  3         /// </summary>
  4         public static void single_able()
  5         {
  6             using (var sql = new SqlModel<T_BAS_Areas>())
  7             {
  8                 //!+常用方法
  9                 /*
 10                     *使用說明                 
 11                     *數據查詢方法,只有調用後才會有數據返回
 12                     *ToDataTable(),ToList(),ToPageList(),First(),FirstOrDefault()
 13                     */
 14                 //?查預設一條數據
 15                 var data1 = sql
 16                     .SqlSelect(a => new { a.AreaName, a.AreaCode })
 17                     .FirstOrDefault();
 18                 //?所有欄位查詢
 19                 var data1_1 = sql
 20                     .SqlSelect()
 21                     .FirstOrDefault();
 22                 //查詢top 10
 23                 var data1_2 = sql
 24                     .SqlSelect()
 25                     .SqlTop(10)
 26                     .ToList();
 27                 //?DataTable
 28                 var data2 = sql
 29                     .SqlSelect(a => new { a.AreaName, a.AreaCode })
 30                     .ToDataTable();
 31                 //?List
 32                 var data3 = sql
 33                     .SqlSelect(a => new { a.AreaName, a.AreaCode })
 34                     .ToList();
 35                 //?分頁
 36                 var data4 = sql
 37                     .SqlPage(a => new { a.AreaName, a.AreaCode })
 38                     .ToPageList();
 39                 var data4_1 = sql
 40                     .SqlPage(a => new { a.AreaName, a.AreaCode }, 1, 20)
 41                     .ToPageList();
 42                 //?count
 43                 var data5 = sql
 44                     .SqlCount(a => a.AreaCode == "");
 45                 //?sum
 46                 var data6 = sql
 47                     .SqlSum(a => new { a.AreaCode })
 48                     .First();
 49 
 50                 //?無鎖查詢
 51                 var data7 = sql
 52                     .SqlSelect(a => new { a.AreaName, a.AreaCode }, LockType.NOLOCK)
 53                     .FirstOrDefault();
 54                 //?指定索引查詢
 55                 var data8 = sql
 56                     .SqlSelect(a => new { a.AreaName, a.AreaCode }
 57                     , "PK_T_BAS_AREAS")
 58                     .FirstOrDefault();
 59 
 60                 //?條件查詢
 61                 var data9 = sql
 62                     .SqlSelect(a => new { a.AreaName, a.AreaCode })
 63                     .SqlWhere(a => a.ParentAreaCode == "1251" && a.AreaName.SqlLike("九江"))
 64                     .FirstOrDefault();
 65                 //? 查前10條併排序
 66                 var data10 = sql
 67                     .SqlSelect(a => new { a.AreaName, a.ParentAreaCode, a.AreaCode })
 68                     .SqlTop(10)
 69                     .SqlOrderBy(b => new { b.ParentAreaCode, b.AreaCode })
 70                     .ToList();
 71                 var data11 = sql
 72                     .SqlSelect(a => new { a.AreaName, a.ParentAreaCode, a.AreaCode })
 73                     .SqlTop(10)
 74                     .SqlOrderDescBy(b => new { b.ParentAreaCode, b.AreaCode })
 75                     .ToList();
 76                 //? 查前10%條併排序
 77                 var data12 = sql
 78                     .SqlSelect(a => new { a.AreaName, a.ParentAreaCode, a.AreaCode })
 79                     .SqlPercent(10).SqlOrderBy(b => new { b.ParentAreaCode }).ToList();
 80                 data12 = sql.SqlSelect(a => new { a.AreaName, a.ParentAreaCode, a.AreaCode })
 81                     .SqlPercent(10)
 82                     .SqlOrderDescBy(b => new { b.ParentAreaCode })
 83                     .SqlOrderBy(c => new { c.AreaCode })
 84                     .ToList();
 85 
 86                 //?查前10條不重覆的項
 87                 var data13 = sql
 88                     .SqlSelect(a => new { a.ParentAreaCode, a.AreaCode })
 89                     .SqlDistinct()
 90                     .SqlTop(10)
 91                     .ToList();
 92 
 93                 //!更新
 94                 sql.SqlUpdate(a => new object[] { a.AreaName == "溪湖區" },//a.SqlFunc("AreaCode='2'")
 95                     b => b.AreaGuidGuid == Guid.Parse("949B2F9D-F730-48ED-8B58-000144166BE9"));
 96 
 97 
 98                 //!添加
 99                 T_BAS_Areas area = new T_BAS_Areas()
100                 {
101                     AreaGuidGuid = Guid.NewGuid(),
102                     AreaCode = "1",
103                     AreaName = "測試",
104                     ParentAreaCode = "-1",
105                 };
106                 sql.SqlAdd(area);
107                 //!刪除
108                 sql.SqlDelete(a => a.AreaGuidGuid == area.AreaGuidGuid);
109 
110                 //where 查詢
111                 var data14 = sql
112                     .SqlSelect(a => new { a.AreaName, a.AreaCode })
113                     .SqlWhere(a => a.AreaName.SqlLike("六一") && a.AreaCode.SqlFunc("AreaCode=1"))
114                     .ToList();
115                 var data141 = sql
116                     .SqlSelect(a => new { a.AreaName, a.AreaCode })
117                     .SqlWhere(a => a.AreaName.SqlLike("%{0}?", "六一")
118                         && a.AreaCode.SqlFunc("AreaCode='1'")//a.SqlFunc("AreaCode='1'")
119                         || a.AreaCode.SqlFunc("AreaCode=Parent"))
120                         .ToList();
121             }
122         }
單表查詢
 1         /// <summary>
 2         /// 多表查詢
 3         /// </summary>
 4         public static void multilist_table()
 5         {
 6 
 7             using (var sql = new SqlModel<T_ST_Role, T_ST_Role_Permission>())
 8             {
 9                 int count;
10                 var left = sql.SqlSelect((a, b) => new { NameTest = a.RoleName, b.PermissionCode })
11                             .SqlJionLeft((a, b) => b)
12                                     .SqlOn((a, b) => a.RoleGuid == b.RoleGuid)
13                                     .SqlOrderBy((a, b) => b.PermissionCode)
14                                     .SqlWhere((a, b) => a.RoleCode == "1")
15                                     .ToList();
16                 count = left.Count;
17 
18                 var right = sql.SqlSelect((a, b) => new { NameTest = a.RoleName, b.PermissionCode })
19                             .SqlJionRight((a, b) => b)
20                                     .SqlOn((a, b) => a.RoleGuid == b.RoleGuid)
21                                     .ToList();
22 
23                 var full = sql.SqlSelect((a, b) => new { NameTest = a.RoleName, b.PermissionCode, })
24                             .SqlJionFull((a, b) => b)
25                                     .SqlOn((a, b) => a.RoleGuid == b.RoleGuid)
26                                     .ToList();
27 
28                 var inner = sql.SqlSelect((a, b) => new { NameTest = a.RoleName, b.PermissionCode })
29                             .SqlJionInner((a, b) => b)
30                                     .SqlOn((a, b) => a.RoleGuid == b.RoleGuid)
31                                     .ToList();
32 
33                 var page = sql.SqlPage((a, b) => new { a.RoleGuid, NameTest = a.RoleName, b.PermissionCode }, 1, 20)
34                             .SqlJionLeft((a, b) => b).SqlOn((a, b) => a.RoleGuid == b.RoleGuid)
35                                 .SqlWhere((a, b) => a.RoleCode == "R000001")
36                                 .SqlOrderBy((a, b) => b.PermissionCode)//.SqlOrderBy(o => new { o.PermissionCode })
37                                 .ToPageList();
38 
39             }
40 
41             using (var sql = new SqlModel<T_ST_Role, T_ST_Role_Permission, T_ST_Permission, T_ST_User_Role>())
42             {
43                 var data = sql.SqlSelect((a, b, c, d) => new { a.RoleGuid, a.RoleName, b.Role_PermissionGuid, c.PermissionCode })
44                             .SqlJionLeft((a, b, c, d) => b).SqlOn((a, b, c, d) => a.RoleGuid == b.RoleGuid)
45                             .SqlJionRight((a, b, c, d) => c).SqlOn((a, b, c, d) => b.PermissionGuid == c.PermissionGuid)
46                             .SqlJionLeft((a, b, c, d) => d).SqlOn((a, b, c, d) => a.RoleGuid == d.RoleGuid)
47                                     .ToList();
48 
49                 var page = sql.SqlPage((a, b, c, d) => new { a.RoleGuid, a.RoleName, b.Role_PermissionGuid, c.PermissionCode })
50                         .SqlJionLeft((a, b, c, d) => b).SqlOn((a, b, c, d) => a.RoleGuid == b.RoleGuid)
51                         .SqlJionRight((a, b, c, d) => c).SqlOn((a, b, c, d) => b.PermissionGuid == c.PermissionGuid)
52                             .SqlJionLeft((a, b, c, d) => d).SqlOn((a, b, c, d) => a.RoleGuid == d.RoleGuid)
53                                 .ToPageList();
54             }
55         }
多表查詢
 1         /// <summary>
 2         /// groupby case when then
 3         /// </summary>
 4         public static void groupby_casewhenthe()
 5         {
 6             using (var sql = new SqlModel<Students>())
 7             {
 8                 //case when then查詢方式1
 9                 //CASE WHEN age=16 THEN '16歲' WHEN age=18 THEN '18歲' WHEN age=20 THEN '20歲'else '可選' END AS remark
10                 var casewh = sql
11                     .SqlNewSelect(a =>
12                         new
13                         {
14                             a.Name,
15                             Remark = a.CaseWhen(b => b.Age == 16).Then("16歲").When(b => b.Age == 18).Then("18歲").When(b => b.Age == 20).Then("20歲").Else("其它").End()
16                         }).First();
17                 //case when then查詢方式2 多條件選擇
18                 //CASE Age WHEN 16 THEN '16歲' WHEN 18 THEN '18歲' WHEN 20 THEN '20歲'else '可選' END AS remark
19                 var casewh2 = sql
20                     .SqlNewSelect(a =>
21                         new
22                         {
23                             a.Name,
24                             Remark = a.Case(a.Age).When(16).Then("16歲").When(18).Then("18歲").When(20).Then("20歲").Else("其它").End()
25                         }).First();
26                 //group by查詢
27                 var fun = sql
28                     .SqlNewSelect(a => new
29                     {
30                         a.Name,
31                         asName = a.Name.SqlCount(),
32                         asAge = a.Age.SqlSum(),
33                         asMaxAge = a.Age.SqlMax(),
34                         asMinAge = a.Age.SqlMin(),
35                         asAvg = a.Age.SqlAVG()
36                     })
37                     .SqlWhere(a => a.Age == 14)
38                     .SqlGroupBy(a => new { a.Name, a.Age })
39                     .SqlHaving(a => a.Name == "name_1500081")
40                     .SqlOrderBy(a => a.Name).First();
41 
42                 Console.WriteLine(fun.asMaxAge + casewh.Name);
43             }
44         }
Group查詢,Case查詢 
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.2版本主要添加了分數、取負、開方三個功能,由於這三中運算輸入單目運算,所以,新聲明瞭一個新類 class OPeratorV1_2 至此基本完成了一個標準計算器,至於擁有更多功能的科學計算器,日後再做開發,暫定版本2.0 代碼如下: 自己寫的操作類,負責各種運算,由於是利用了工廠模式,以後新增功 ...
  • 密碼管理工具 以KeePass為主,結合LastPass線上瀏覽器網頁密碼。有錢銀可以考慮1Password。 KeePass LastPass 1Password 價格費用 免費開源 普通版:免費 Mac+Windows單用戶:$69 個人專業版:$1/月 Mac+Windows家庭裝:$99.9... ...
  • 在項目中遇到了一個比較奇怪的問題,在foreach迴圈中修改列表的值後沒有生效,後面使用時還是獲取列表時的值,原因是因為使用了 yield return 。下麵讓我們來探究下其中的原因: 首先來看下 yield return 官方的解釋 使用 yield return 語句可一次返回一個元素。通過 ...
  • 在很多時候,我們在資料庫裡面定義表欄位和實際在頁面中展示的內容,往往是不太匹配的,頁面數據可能是多個表數據的綜合體,因此除了我們在表設計的時候考慮周到外,還需要考慮數據展現的處理。如果是常規的處理,那麼需要對部分外鍵欄位進行特別的轉義處理,如果需要增加多一些欄位,那麼這種處理可能就相對比較麻煩一些。... ...
  • 一、存儲過程與函數的區別: 1.一般來說,存儲過程實現的功能要複雜一點,而函數的實現的功能針對性比較強。 2.對於存儲過程來說可以返回參數(output),而函數只能返回值或者表對象。 3.存儲過程一般是作為一個獨立的部分來執行,而函數可以作為查詢語句的一個部分來調用,由於函數可以返回一個表對象,因 ...
  • XML(可擴展標記語言)文件,可以用來標記數據、定義數據類型,是一種允許用戶對自己的標記語言進行定義的源語言。 XML與HTML的設計區別是:XML 被設計為傳輸和存儲數據,其焦點是數據的內容。而HTML 被設計用來顯示數據,其焦點是數據的外觀。HTML 旨在顯示信息,而 XML 旨在傳輸信息。 X ...
  • 本文內容 實例化一個類的方式 用 New 關鍵字實例化一個類 用 Activator 實例化一個類 用 Assembly 實例化一個類 性能比較 環境 比較 分析 代碼 在開發應用程式時,能夠動態實例化一個類很有用。給出類的一個字元串名稱,就能夠創建這個類的一個實例。若這些需要實例化的類都繼承同一個 ...
  • 示例: 參數一為構件樹的數據集合,參數二為樹節點轉化委托,參數三為根節點選擇器,參數四是父子關係選擇器. ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...