c 用乙個方法讀取資料庫資料到不同Model類的例項,如何用泛型實現?

時間 2021-06-01 21:11:52

1樓:

如果只是一句 SQL + 泛型約束 >>執行》 泛型類例項這樣的需求有很多方法,說來說去也就三個主要步驟:

一.執行 SQL 語句,返回 DataReader 或者 DataTable,這兩個都可以使用列名訪問到資料。

二.選擇不同的方式建立 Model 與資料庫表的對映關係,最簡單就是 PropertyName = ColumnName,也可以學習 EF 使用[ColumnAttribute],或者配置 xml 檔案。

三.讀取這些對映關係開始一邊 Read 一邊賦值,可以用反射、委託、表示式樹、Emit 直接寫 IL 等,這三者的效能差異以及優缺點隨便搜尋就有了。最容易的肯定是反射跟委託,但是我推薦用表示式樹,Emit不好理解,表示式樹的優點在於你後期還可以擼乙個輕量級的 Linq to sql 出來,這方面的資訊可以看看我挖的坑:

自己動手實現Expression翻譯器

另外你這個需求我也有乙個半成品你可以看一下,非常簡單的乙個示例,當然很多東西沒有考慮到:ilovezcd/DatabaseAccess · GitHub

總之你會發現這條路走到黑也是自己寫了乙個 ORM 出來(真不建議大家手打 SQL,就算為了那麼點效率這種工作也該由工具來做),只不過更適合你自己用而已,記住好的東西都差不多好,壞的東西千百樣壞。

2樓:鍾典

public

class

getOneResultBySQL

whereT:

WebAPI

.Models

.RootModel

}rdr

.Close

();conn

.Close

();//這麼關閉真的不好嗎,畢竟要return不同的東西啊,雖然現在返回的是乙個東西。。。。

return

resultModel;}

catch

(Exceptionex)

}}第一次自問自答,自己這麼醜的命名法則拿出來真是不好意思。最後發現自己對泛型的理解實在太淺薄,Gee Law大神 做了一番分析方才醍醐灌頂。所以最後還是用反射來做了,雖然寫的醜還是拿出來給遇到相同問題的同學參考參考。

3樓:

作為乙個程式設計師,提出如何用XX實現乙個YY的功能就說明不適合做程式設計師。

因為程式設計師的思維方式是用什麼能實現YY的功能。

好吧,回答問題

1、如果問題是,需要執行乙個SQL並返回某個強型別資料:

那麼這種輕量級資料訪問框架一抓一大把:

jy02305022/blqw-data

Ivony/DbUtility · GitHub2、如果問題是,對泛型T的物件的特定成員執行操作:

增加泛型約束,約束越多,可以訪問到的成員越多,可以訪問的成員取決於泛型的約束。換言之約束就是確保T具備某些成員的乙個保證。

3、如果問題是,針對普遍的T執行普遍的操作,針對特定的具備特定成員的T執行另一些操作:

這個叫做泛型的特化,只有C++支援,這是因為C++的泛型展開處於編譯期的緣故。

C 大資料量如何高效率讀取解析資料庫大字段?

蘇佳 幾十萬條不等於資料量很大。讀取10w資料表結構不是很複雜的情況下,網路好的情況下。幾秒就好了。然後用bulkinsert大概幾秒 一筆拆成多筆也差不多幾十秒也完成了 Table Valued Parameters Table Valued Parameters Database Engine ...

動態獲取資料庫資料,用ajax不重新整理直接顯示到網頁好,還是用php動態生成頁面

這等於是前端渲染還是後段渲染的問題。體驗上,ajax前端渲染體驗會好不少。可以看一下vue,react等前端框架。前端渲染確實有SEO優化問題,也是這些前端框架正在努力解決的方向。 看需求。如果是簡單的東西,比如說使用者資料卡片 某個快遞的具體資訊什麼的,那麼用ajax不重新整理比較好。如果是文章 ...

新手學習資料庫用oracle 12c合適嗎?

ii奶糖 兩種方式 一是先學習11g,因為目前企業基本上用的大都還是11.2.0.4版本的。系統地學習11g,然後在11g基礎上了解學習19c新特性,對比兩個大版本之間的差異。後續如果在工作中遇到11g或者10g以下版本維護操作或者遷移公升級到19c等,能有比較大的幫助。二是新手的話可能直接學習19...