日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

一點構想-直觀的強類型的SQL查詢的一種實現

系統 2430 0
??? 看過很多強類型查詢的實現,覺得通過層層嵌套的方法來構造,感覺很不直觀,昨天下午花了點時間寫了個驗證的代碼,現在發上來大家看看這樣子實現的查詢方便不方便,有什么問題,因為是突發奇想,所以未經過嚴格驗證,所以如果發現問題請溫柔提出.
??? 這里只是個驗證想法的代碼,所以沒有作任何容錯和擴展性處理.也不要提出OO不OO的看法,毫無疑義.
??? 我所設想的是一個查詢 Select [Columnlist] From [TableName] Where [Exp] Order By [PK] 一般來說是這個格式,我們最難表述的其實就是[Exp]這個部分。前面的都比較格式化,所以可以通過嵌套方法來實現還是比較合適的,但是[Exp]這個部分用諸如AND(Exp1,Exp2)這樣子的形式不能很直觀的看出表達式的意義,所以通過重載操作符的方式來實現,這里我們假設在Entity的Class里有static成員來存儲列的名稱。那么
????
???? Exp Rs=new Exp(User.ID) == 2 & new Exp(User.State) > 0 ;
????
??? ?這樣子的格式就能表達Where后面的?ID=2 AND State>0 這個表達式

???? 具體代碼如下

??1 ???? class ?Program
??2 ???? {
??3 ???????? static ? void ?Main( string []?args)
??4 ???????? {
??5
??6 ????????????Exp?rs? = ? new ?Exp( " C1 " )? == ? 25 ? & ? new ?Exp( " C2 " )? > ? 3 ? | ? new ?Exp( " C3 " )? < ? 5 ? ^ ? new ?Exp( " C4 " )? % ? " hehe " ;
??7 ????????????Console.WriteLine(rs.Sql);
??8 ???????????? foreach ?(SqlParameter?sp? in ?rs.Sps)
??9 ???????????? {
?10 ????????????????Console.WriteLine(sp.ParameterName);
?11 ????????????}

?12 ????????????Console.Read();
?13 ????????}

?14 ????}

?15
?16 ???? class ?Exp
?17 ???? {
?18 ???????? private ? string ?_Sql;
?19
?20 ???????? private ?List < SqlParameter > ?sps;
?21
?22 ???????? public ?List < SqlParameter > ?Sps
?23 ???????? {
?24 ???????????? get ? {? return ?sps;?}
?25 ???????????? set ? {?sps? = ?value;?}
?26 ????????}

?27
?28 ???????? private ?SqlParameter?sp;
?29
?30 ???????? public ? string ?Sql
?31 ???????? {
?32 ???????????? get ? {? return ?_Sql;?}
?33 ????????}

?34
?35 ???????? private ?Exp()
?36 ???????? {
?37 ????????????sps? = ? new ?List < SqlParameter > ();
?38 ????????}

?39
?40 ???????? public ?Exp( string ?CollumnName)
?41 ???????? {
?42 ????????????_Sql? = ?CollumnName;
?43 ????????}

?44
?45 ???????? public ? static ?Exp? operator ? == (Exp?Left,?Object?Value)
?46 ???????? {
?47 ????????????Exp?Next? = ? new ?Exp();
?48 ????????????Next.sp? = ? new ?SqlParameter(Left._Sql,?Value);
?49 ????????????Next.sps.Add(Next.sp);
?50 ????????????Next._Sql? = ?Left._Sql? + ? " ?=?@ " ? + ?Left.Sql;
?51 ???????????? return ?Next;
?52 ????????}

?53 ???????? public ? static ?Exp? operator ? != (Exp?Left,?Object?Value)
?54 ???????? {
?55 ????????????Exp?Next? = ? new ?Exp();
?56 ????????????Next.sp? = ? new ?SqlParameter(Left._Sql,?Value);
?57 ????????????Next.sps.Add(Next.sp);
?58 ????????????Next._Sql? = ?Left._Sql? + ? " ?<>?@ " ? + ?Left._Sql;
?59 ???????????? return ?Next;
?60 ????????}

?61
?62 ???????? public ? static ?Exp? operator ? < (Exp?Left,?Object?Value)
?63 ???????? {
?64 ????????????Exp?Next? = ? new ?Exp();
?65 ????????????Next.sp? = ? new ?SqlParameter(Left._Sql,?Value);
?66 ????????????Next.sps.Add(Next.sp);
?67 ????????????Next._Sql? = ?Left._Sql? + ? " ?<?@ " ? + ?Left._Sql;
?68 ???????????? return ?Next;
?69 ????????}

?70 ???????? public ? static ?Exp? operator ? > (Exp?Left,?Object?Value)
?71 ???????? {
?72 ????????????Exp?Next? = ? new ?Exp();
?73 ????????????Next.sp? = ? new ?SqlParameter(Left._Sql,?Value);
?74 ????????????Next.sps.Add(Next.sp);
?75 ????????????Next._Sql? = ?Left._Sql? + ? " ?>?@ " ? + ?Left._Sql;
?76 ???????????? return ?Next;
?77 ????????}

?78
?79 ???????? public ? static ?Exp? operator ? % (Exp?Left,?Object?Value)
?80 ???????? {
?81 ????????????Exp?Next? = ? new ?Exp();
?82 ????????????Next.sp? = ? new ?SqlParameter(Left._Sql,?Value);
?83 ????????????Next.sps.Add(Next.sp);
?84 ????????????Next._Sql? = ?Left._Sql? + ? " ?Like?@ " ? + ?Left._Sql;
?85 ???????????? return ?Next;
?86 ????????}

?87
?88 ???????? public ? static ?Exp? operator ? & (Exp?Left,?Exp?Right)
?89 ???????? {
?90 ????????????Exp?Next? = ? new ?Exp();
?91 ???????????? foreach ?(SqlParameter?sp? in ?Left.sps)
?92 ???????????? {
?93 ????????????????Next.sps.Add(sp);
?94 ????????????}

?95 ???????????? foreach ?(SqlParameter?sp? in ?Right.sps)
?96 ???????????? {
?97 ????????????????Next.sps.Add(sp);
?98 ????????????}

?99 ????????????Next._Sql? = ?Left.Sql? + ? " ?AND? " ? + ?Right.Sql;
100 ???????????? return ?Next;
101 ????????}

102
103
104 ???????? public ? static ?Exp? operator ? | (Exp?Left,?Exp?Right)
105 ???????? {
106 ????????????Exp?Next? = ? new ?Exp();
107 ???????????? foreach ?(SqlParameter?sp? in ?Left.sps)
108 ???????????? {
109 ????????????????Next.sps.Add(sp);
110 ????????????}

111 ???????????? foreach ?(SqlParameter?sp? in ?Right.sps)
112 ???????????? {
113 ????????????????Next.sps.Add(sp);
114 ????????????}

115 ????????????Next._Sql? = ?Left.Sql? + ? " ?OR? " ? + ?Right.Sql;
116 ???????????? return ?Next;
117 ????????}

118
119 ???????? public ? static ?Exp? operator ? ^ (Exp?Left,?Exp?Right)
120 ???????? {
121 ????????????Exp?Next? = ? new ?Exp();
122 ???????????? foreach ?(SqlParameter?sp? in ?Left.sps)
123 ???????????? {
124 ????????????????Next.sps.Add(sp);
125 ????????????}

126 ???????????? foreach ?(SqlParameter?sp? in ?Right.sps)
127 ???????????? {
128 ????????????????Next.sps.Add(sp);
129 ????????????}

130 ????????????Next._Sql? = ?Left.Sql? + ? " ?NOT? " ? + ?Right.Sql;
131 ???????????? return ?Next;
132 ????????}

133 ????}

134 ???

????

一點構想-直觀的強類型的SQL查詢的一種實現


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 兴安盟| 祥云县| 普宁市| 井陉县| 盐城市| 内黄县| 铜山县| 浙江省| 常宁市| 武功县| 太仆寺旗| 壤塘县| 彝良县| 高陵县| 襄城县| 大城县| 五华县| 鹰潭市| 乡宁县| 万源市| 玛多县| 崇义县| 察雅县| 菏泽市| 亚东县| 台湾省| 城口县| 法库县| 中牟县| 通江县| 年辖:市辖区| 利辛县| 阆中市| 西盟| 潞西市| 眉山市| 图们市| 浦江县| 长汀县| 法库县| 华池县|