iT邦幫忙

0

(2/15 更新) 利用VS2022的取代,將LINQ改寫純SQL應用

  • 分享至 

  • xImage

利用VS2022的取代,將LINQ改寫純SQL應用

前言:
抱歉~我就是個不求新知的老人-.-"
只會在工作當下有需要才學習0.0a
目前習慣就是只會寫純SQL做一切功能應用
經查LINQ對於純SQL而言是無法進行複雜操作的
LINQ對於效能比SQL低,但對於程式碼可讀性極高(可反向追朔、顯示註解說明)

前陣子~有一篇文章詢問VS2022的取代用法
https://ithelp.ithome.com.tw/questions/10215002

目的就是要將SQL直接貼來Visual Studio裡面使用

原先的取代指令~是不含中文字的搜尋判斷
搜尋:--(?<value>[\a-z]+)\r\n
轉換:\tSql += " ${value}";\r\n

增加中文字的搜尋
搜尋:--(?<value>[\a-z\u4e00-\u9fa5]+)\r\n
轉換:\tSql += " ${value}";\r\n

以下這些程式碼,是從某開發公司買斷(看原始碼的工程師時間異動註記,從2021開發到2023),後來買來自己開發增加更多功能(客製化)

01.原先的LINQ是長這樣
https://ithelp.ithome.com.tw/upload/images/20240207/200613692LVK6XwgcQ.png

02.我到資料庫介面,寫一段一樣功能輸出的SQL
https://ithelp.ithome.com.tw/upload/images/20240207/20061369xAvv00K19H.png

03.將寫好的SQL,全部都註解起來
https://ithelp.ithome.com.tw/upload/images/20240207/20061369GhXiCjug6O.png

04.將註解的SQL,貼到Visual Studio裡面,另外最好按一下【Ctrl+Z】,因為Visual Studio好像會自動修正片段變成斷第2行。
https://ithelp.ithome.com.tw/upload/images/20240207/20061369fQLt2HYl8I.png

05.下達Visual Studio的取代及轉換指令(正規表示式)
https://ithelp.ithome.com.tw/upload/images/20240207/200613690pzDAarhBU.png

06.執行取代命令完成後,SQL就轉換成C#專用的字串設定了
https://ithelp.ithome.com.tw/upload/images/20240207/20061369pyNinxQsa5.png

07.這是執行SQL後,查資料匯出到Excel的寫法(原開發公司的LINQ寫法,我都刪除了-.-"),我還是習慣寫VB時代的用法。
https://ithelp.ithome.com.tw/upload/images/20240207/20061369pra7bFLM9i.png

對於接到Asp.net + Kendo UI,因為我是第一次使用Kendo UI,很多都是陌生語法結構,幸好前輩的電腦有留下Kendo UI的參考連結,在大陸有詳細介紹前端,台灣並沒有相關詳細介紹的樣子?

CSDN 博客:Kendo UI Grid 用法详细整理
https://blog.csdn.net/qwerdfcv/article/details/103479584

01.在View目錄的網頁,用Kendo UI Grid方式產生HTML原始碼(目前查不到相關網頁介紹MVC)
https://ithelp.ithome.com.tw/upload/images/20240207/20061369EcxDOp54Iq.png

02.用JacaScript去跟產生HTML原始碼溝通互動的相關指令(大陸有詳細介紹)
https://ithelp.ithome.com.tw/upload/images/20240207/20061369xVshqzemSl.png


2024/02/15 更新

感謝suika邦友推薦
改用 逐字字串常值 的方式
https://learn.microsoft.com/zh-tw/dotnet/csharp/programming-guide/strings/#verbatim-string-literals

改用此方式就不需要用取代了。
https://ithelp.ithome.com.tw/upload/images/20240215/20061369Oabu5fH4Hh.png

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

1
一級屠豬士
iT邦大師 1 級 ‧ 2024-02-07 13:32:42
最佳解答

目的是要轉成CSV,好給Excel. 用SQL做 Pivot 就好了.

原本那段 LINQ 的寫法, 一種假別做一次查詢, 程式又是複製貼上.
LINQ應該有高明一點的寫法.

看更多先前的回應...收起先前的回應...

其實他不止假別~還有混合遲到、早退、獎逞(各種表格)

他們LINQ判斷一堆有的沒的(套裝版),但使用的公司(制度)用不到~很多都刪除掉了

這是最後LINQ判斷完後匯出Excel或PDF列印 (原始資料[已刪除更改])

https://ithelp.ithome.com.tw/upload/images/20240207/200613690UkY2cLoxq.png
https://ithelp.ithome.com.tw/upload/images/20240207/20061369Xm6eTNKzG2.png

然後這是他的前端介面~很簡單查部門、查哪個月份,要產生列印(生成PDF檔案)或Excel(.xlsx檔案)
https://ithelp.ithome.com.tw/upload/images/20240207/20061369Pp9cfI6vMb.png

調整成適合的情況,辛苦了,加油!

我覺得這個SQL好用~
可以查出隱藏新增資料的關聯表格(程式碼沒寫)
當執行中的程式按送出後~
在資料庫馬上查詢~就知道LINQ轉換SQL後影響那些表格

--即時查詢SQL異動紀錄(顯示完整SQL)

SELECT st.text as sql_statement,
       qs.creation_time as plan_last_compiled,
       qs.last_execution_time as plan_last_executed,
       qs.execution_count as plan_executed_count,
       qp.query_plan
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.plan_handle) st
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
order by total_elapsed_time/execution_count desc

1
suika
iT邦見習生 ‧ 2024-02-14 15:07:59

取代及轉換的部分,以你的情況其實只需要加上 @ (使用逐字字串常值實現)

string sql = @"
SELECT *
FROM USER
WHERE USER_PERMISSION > 655 
";

對唷~可以這樣~上班來試試~搞不好就不需要取代了~

我要發表回答

立即登入回答