利用Attribute簡化SQL刪除操作

2021-06-19 08:00:59 字數 3019 閱讀 2175

昨天跟朋友聊天,發現他們的專案資料層使用的是最基礎的純sql語句+sqlparameter進行資料互動的,大家知道select、update、create對於表的依賴性比較大,然後刪除語句卻不一樣,它的語法比較簡單,大致有以下幾種:

1、delete from tablename

2、delete from tablename where id = idvalue

3、delete from tablename where id in (id1, id2, id3, id4....)

於是我們要實現這個簡單的功能來簡化比較常用的刪除就比較容易了,主要保留2個資料,1個是tablename,另外1個就是id了,如果實體類有基類的情況下,我們可以擴充套件基類,提供2個介面,讓其他的實體類去實現來儲存對應的tablename和id。但是如果沒有基類的話,我們也可以利用attribute來實現這個功能。

attribute**如下:

1 [attributeusage(attributetargets.class, allowmultiple = false, inherited = false)]

2public

class dbattribute : attribute

3 19

20#endregion

2122

#region 普通方法

2324

public

string getdeleteallsql()

25

", this.m_tablename);

30 }

3132

///33

///獲取根據主鍵刪除表資料

34///

35///

資料庫型別

36///

主鍵型別名

37///

主鍵值38

///39

public keyvaluepair getdeletebyprimarykeysql(tpkvalue tpkvalue)

40where tparam : dbparameter, new()

41 = :_pk_

", this.m_primarykey));

45 markparametermarkparameter = new markparameter();

46var arrdbparam = markparameter.castmark(ref sql, new hashtable

47

49 });

50return

new keyvaluepair(sql, arrdbparam);

51 }

5253

///54

///獲取根據主鍵陣列刪除表資料

55

///56

///57

///58

///59

///60

public keyvaluepair getdeleteinprimarykeysql(params tpkvalue arrtpkvalue)

61where tparam : dbparameter, new()

62 in (:_arr_pk_)

", this.m_primarykey));

66 markparametermarkparameter = new markparameter();

67var arrdbparam = markparameter.castmark(ref sql, new hashtable

68

70 });

71return

new keyvaluepair(sql, arrdbparam);

72 }

7374

#endregion

75 }

以上用到泛型模式以及前幾篇文章提到的替換引數的方法,文章在此。有了以上的attribute,我們就可以用它來標記實體類了,**如下: 

1 [db("

permission_info

", "

p_id

")]2

public

partial

class permission

3

為了演示,我寫了乙個用來呼叫的方法,來測試產生的語句和引數。測試類**如下:

1

public

class dboperate

2 11

return sql;

12 }

1314

public

static keyvaluepair getdeletebyidsql(params tpkvalue arrtpkvalue) where tclass : new()

15

24else

25

28 }

29return pair;

30 }

3132

static dbattribute getattribute() where t : new()

33

40return attr;

41 }

42 }

**測試如下:

以上**並不是最優的選擇,我們仍然可以在attribute呼叫的地方進行優化,大家可以參考老趙的《attribute操作的效能優化方式》

利用PCA簡化資料

主成分分析 principal component analysis 可以把大量的資料的維度減小,也可以叫做降維。這麼做的好處如下 通過將原來的資料從高維度的座標系對映到低維度新的座標系來,這裡有一篇很不錯的例子 主元分析 pca 理論分析及應用。去除平均值 計算協方差矩陣 計算協方差矩陣的特徵值和...

c 利用Attribute實現類的轉換

背景 客戶端接入了多家廠商的產品,這時候需要將各家廠商定義的類,統一成我們自己的類。利用反射實現,不必乙個乙個手動去新建物件賦值。缺陷 目前只能轉系統自定義的基本型別,無法轉換複雜型別 類中包含類,或者list 1.定義類中我們要轉換的物件 attributeusage attributetarge...

利用 遞迴 思想來簡化問題

首先,經典的漢諾塔問題用遞迴來實現將會很簡單,如下 void move char pos1,char pos2 void hannoi int n,char pos1,char pos2,char pos3 else 由兩個函式來實現完成,遞迴結束的終點是只有乙個盤子是將盤子從pos1移動動到pos...