日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

动态创建ActiveRecord条件的查询 MyQuery

發(fā)布時間:2023/12/13 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 动态创建ActiveRecord条件的查询 MyQuery 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
在CMS中。我們經(jīng)常會按一定的條件來進行搜索。如果用戶沒有選擇這個條件的話,我們就不能將它放到sql中
也許我們可以用自己拼裝sql語句的方式很好的實現(xiàn)這種查詢。然后再前面過濾掉一些危險的參數(shù)
但是參數(shù)過濾有一個不好的地方是。會把一些信息給過濾掉了。

在castle ActiveRecord里面我們最基本的查詢都是靠傳參的形式了。
ScalarQuery<xxInfo> query = new ScalarQuery<xxInfo>(typeof(xxInfo), hql,ID);
如果用傳參的話我們感覺在 ActiveRecord里會比較麻煩。寫起來不順

于是我們自己寫了一簡單的類來處下這種情況(不清楚它是否提供類似的處理類,方法)也修正了一下bug
/**////風云?lovebanyi.cnblogs.com?
public?class?MyQuery<T>?:?SimpleQuery<T>
????
{
????????
public?MyQuery(string?query)
????????????:?
base(query)
????????
{

????????}

????????
private?int?i?=?0;
????????
public?void?AddCondition(string?porperty,?string?@operator,?object?parm)
????????
{
????????????
if?(i?==?0)
????????????
{
????????????????
base.Query?+=?"?where?"?+?porperty?+?"?"?+?@operator?+?"??";
????????????}

????????????
else
????????????
{
????????????????
base.Query?+=??"?and?"?+?porperty?+?"?"?+?@operator?+?"??";
????????????}

????????????
base.AddModifier(new?Castle.ActiveRecord.Queries.Modifiers.QueryParameter(i++,?parm));
????????}

????????
public?void?AddCondition(string?condition)
????????
{
????????????
if?(i?==?0)
????????????
{
????????????????
base.Query?+=?"?where?"?+?condition;
????????????}

????????????
else
????????????
{?
????????????????
base.Query?+=?"?and?"+?condition;
????????????}

????????}

????????
public?void?AddCondition(string?condition,?object?parm)
????????
{
????????????AddCondition(condition);
????????????
base.AddModifier(new?Castle.ActiveRecord.Queries.Modifiers.QueryParameter(i++,?parm));
????????}


????????
public?void?AddCondition(string?condition,?List<object>?parms)
????????
{
????????????AddCondition(condition);
????????????
for?(int?j?=?0;?j?<?parms.Count;?j++)
????????????
{
????????????????
base.AddModifier(new?Castle.ActiveRecord.Queries.Modifiers.QueryParameter(i++,?parms[j]));
????????????}

????????}

????????
private?System.Text.RegularExpressions.Regex?regCount?=?new?System.Text.RegularExpressions.Regex("^select(.*?)from",?System.Text.RegularExpressions.RegexOptions.Compiled?|?System.Text.RegularExpressions.RegexOptions.IgnoreCase?|?System.Text.RegularExpressions.RegexOptions.Singleline);
????????
????????
protected?override?string?PrepareQueryForCount(string?countQuery)
????????
{
????????????
if?(regCount.IsMatch(countQuery))
????????????
{
????????????????countQuery?
=?regCount.Replace(countQuery,?"select?count(*)?from");
????????????}

????????????
else
????????????
{
????????????????countQuery?
=?"select?count(*)?"?+?countQuery;
????????????}

????????????
return?countQuery;
????????????
????????}
V2 新加一個代碼。這樣你在返回MyQuery<int>的時候不會出錯
????????public?MyQuery(Type?targetType,?string?query)
????????????:?
base(targetType,?query)
????????
{?
????????}

使用 (寫在entiy的類中)
?string?hql?=?"from?Supplier";
????????????MyQuery
<Supplier>?query?=?new?MyQuery<Supplier>(hql);
????????????query.SetQueryRange(start,?maxResults);
????????????query.AddCondition(
"Name","like","%"+name+"%");
????????????query.AddCondition(
"Number","=","0592");
return?query.Execute(); 當然你可以對操作符再次進行一些處理。更好的防止寫錯和加快速度


另一個小例子/Files/lovebanyi/MyQueryExample.txt
v0.2http://files.cnblogs.com/lovebanyi/myqueryV0.2.txt

轉(zhuǎn)載于:https://www.cnblogs.com/lovebanyi/archive/2007/07/24/829654.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結

以上是生活随笔為你收集整理的动态创建ActiveRecord条件的查询 MyQuery的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。