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
  • 問題 有很多應用程式在驗證JSON數據的時候用到了JSON Schema。 在微服務架構下,有時候各個微服務由於各種歷史原因,它們所生成的數據對JSON Object屬性名的大小寫規則可能並不統一,它們需要消費的JSON數據的屬性名可能需要大小寫無關。 遺憾的是,目前的JSON Schema沒有這方 ...
  • 首先下載centos07鏡像,建議使用阿裡雲推薦的地址: https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/?spm=a2c6h.25603864.0.0.59b5f5ad5Nfr0X 其實這裡就已經出現第一個坑了 centos 07 /u ...
  • 相信很多.NETer看了標題,都會忍不住好奇,點進來看看,並且順便準備要噴作者! 這裡,首先要申明一下,作者本人也非常喜歡Linq,也在各個項目中常用Linq。 我愛Linq,Linq優雅萬歲!!!(PS:順便吐槽一下,隔壁Java從8.0版本推出的Streams API,抄了個四不像,一點都不優雅 ...
  • 在人生的重要時刻,我站在了畢業的門檻上,望著前方的道路,心中涌動著對未來的無限憧憬與些許忐忑。面前,兩條道路蜿蜒伸展:一是繼續在職場中尋求穩定,一是勇敢地走出一條屬於自己的創新之路。儘管面臨年齡和現實的挑戰,我仍舊選擇勇往直前,用技術這把鑰匙,開啟新的人生篇章。 迴首過去,我深知時間寶貴,精力有限。 ...
  • 單元測試 前言 時隔多個月,終於抽空學習了點新知識,那麼這次來記錄一下C#怎麼進行單元測試,單元測試是做什麼的。 我相信大部分剛畢業的都很疑惑單元測試是乾什麼的?在小廠實習了6個月後,我發現每天除了寫CRUD就是寫CRUD,幾乎用不到單元測試。寫完一個功能直接上手去測,當然這隻是我個人感受,僅供參考 ...
  • 一:背景 1. 講故事 最近在分析dump時,發現有程式的卡死和WeakReference有關,在以前只知道怎麼用,但不清楚底層邏輯走向是什麼樣的,藉著這個dump的契機來簡單研究下。 二:弱引用的玩法 1. 一些基礎概念 用過WeakReference的朋友都知道這裡面又可以分為弱短和弱長兩個概念 ...
  • 最近想把ET打表工具的報錯提示直接調用win系統彈窗,好讓策劃明顯的知道表格哪裡填錯數據,彈窗需要調用System.Windows.Forms庫。操作如下: 需要在 .csproj 文件中添加: <UseWindowsForms>true</UseWindowsForms> 須將目標平臺設置為 Wi ...
  • 從C#3開始,拓展方法這一特性就得到了廣泛的應用。 此功能允許你能夠使用實例方法的語法調用某個靜態方法,以下是一個獲取/創建文件的靜態方法: public static async Task<StorageFile> GetOrCreateFileAsync(this StorageFolder f ...
  • 在Windows 11下,使用WinUI2.6以上版本的ListView長這樣: 然而到了Win10上,儘管其他控制項的樣式沒有改變,但ListViewItem變成了預設樣式(初代Fluent) 最重大的問題是,Win10上的HorizontalAlignment未被設置成Stretch,可能造成嚴重 ...
  • 前言 周六在公司加班,幹完活後越顯無聊,想著下載RabbiitMQ做個小項目玩玩。然而這一下就下載了2個小時,真讓人頭痛。 簡單的講一下如何安裝吧,網上教程和踩坑文章還是很多的,我講我感覺有用的文章放在本文末尾。 安裝地址 erlang 下載 - Erlang/OTP https://www.erl ...