iT邦幫忙

1

有無推薦的c#動態sql封裝套件

舜~ 2020-10-23 15:18:371944 瀏覽

問一下C#的前輩們

asp.net( C#)中有無類似這篇有動態組合出SQL的套件??
[筆記,PHP,MySQL]常用方法封裝

我想要一個套件可以協助我快速組合出SQL,
要能事先處理掉sql injection問題,
where如果能夠有or更好,沒有就算了

類似像(如果要考慮or完全沒到怎麼呈現會比較好)
db.Table("myTable")
.Where("field1",DateTime.Now, "<")
.Where("field2","a%", "Like")
.Select(new string{"field1","field2"})
.Make()
=> select field1,field2 from myTable where field1 < '2020/...' and field2 field2 Like 'a%'

印象中以前網路上有很多,現在怎麼一篇都找不到...
(google關鍵字 c# 動態組合sql 封裝 class helper 1=1 .....)

原本想說找不到自己寫一個
但在條件AND/OR群組 與 參數in/like 與 遇上nvarchar的還要在參數前面補N( name=N@name 為了多國語言) 的組合再設計上沒有靈感,
不知道有無範例可以參考或是有什麼推薦的套件?


Linq很好用,但花式select出來的匿名物件無法傳遞...
(可以轉成Object在傳遞,但後續操作更麻煩)
除非只為了這一次就新增一個class...
另外聽說Linq to SQL效能很差
所以遇到花式select暫時不考慮Linq

sqlparameter
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
3
japhenchen
iT邦超人 1 級 ‧ 2020-10-23 16:04:04

也有Linq to entities可用哦

動態組成Linq的話
https://archive.codeplex.com/?p=nlinq

範例

  query = new NLinqQuery(
    @"  from m in methods
          where !m.IsStatic
          orderby m.Name
          group m by m.Name into g
          select new { MethodName = g.Key, Overloads = g.Count() }");
0
小碼農米爾
iT邦高手 1 級 ‧ 2020-10-23 18:39:30

可以試試 SqlBuilder
https://github.com/ronnieoverby/UniqueNamespace.SqlBuilder

AND/OR 的用法
https://github.com/ronnieoverby/UniqueNamespace.SqlBuilder/blob/master/src/Tests/PredicateTests.cs

不過後來覺得測試有點麻煩,還是比較喜歡 Dapper 的寫法。

0
pilipala
iT邦新手 2 級 ‧ 2020-10-24 23:51:59

參考看看 LINQKit

我要發表回答

立即登入回答