ASP.NET偷懶大法三 (利用Attribute特性簡化多查詢條件拼接sql語句的麻煩)

來源:互聯網
上載者:User

        最近公司在做武漢公交資訊化管理系統,做這種管理項目,最讓人痛苦的就是表單的添加、修改、查詢。添加、修改在我以前的文章中提到過,利用反射機制可以做到基本不寫代碼來完成。參見《ORM架構實現資料的自動綁定添加修改 <一>》。(不過遺憾的是,目前做的項目中沒使用,還是在痛苦的寫指派陳述式)

        上文中只是解決了添加、修改、顯示列表的問題,但是在多關鍵字查詢的時候就又要開始賦值和拼接字串啦。為了偷懶和省去那些讓人討厭的煩瑣事情俺就又開始想取巧的辦法啦。

        多關鍵字查詢,一般的處理方法是,取出這些查詢條件,然後拼接成字串,然後傳個資料層的函數,然後返回DatSet一類的資料集。在這個過程中有幾個讓人討厭的地方:

  1. 查詢條件過多的時候,參數名就會n多。代碼不好看
  2. 需要連接字串,並且判斷具體要求是like 還是 =
  3. 當查詢條件變化或者查詢要求變化時改代碼很是麻煩,容易出錯

       第一個比較好解決,把這些參數聲明成一個類直接當參數傳進去就行啦。我們現在項目就是這樣做的

       第二個就比較麻煩啦。怎麼樣讓這些參數知道自己是什麼操作呢?也可以說怎麼讓程式自動的知道這些屬性要做什麼操作呢?Attribute 對就是這個玩意。.net中這個像洗盤一樣的類。把他吸到參數上面,然後把操作符傳給他不就行啦!

代碼很簡單,簡單寫一下:

首先聲明一個帶一個屬性的Attribute,用這個屬性來存操作符

 

[AttributeUsage(AttributeTargets.Field)] //此屬性只能用在Field上
    public class OpAttribute : Attribute
    {
        private string _op = string.Empty;
    
        public OpAttribute(string op)
        {
            _op = op; 
        }

        public string Name
        {
            get { return _op; }
            set { _op = value; }
        }
    }

然後在查詢條件的類中加上這些Attribute

public class AttributeClass
{
        [OpAttribute("=")]
        public int MyProperty;
        [OpAttribute("=")]
        public string aa;
        [OpAttribute("like")]
        public string bb;
}

然後再調用一個組合sql語句的方法

 

AttributeClass ac = new AttributeClass();
ac.MyProperty = 11;
ac.aa = "abcd";
ac.bb = "我唉你";
string sql="1=1";
Type type = typeof(AttributeClass);
foreach (System.Reflection.FieldInfo fieldInfo in type.GetFields())
{
                foreach (Attribute at in fieldInfo.GetCustomAttributes(true))
                {
                    OpAttribute att = at as OpAttribute;
                    if (att != null)
                    {
                        sql += " and " + fieldInfo.Name +" "+ att.Name+" "+ fieldInfo.GetValue(ac);
                    }
                }
}

大功告成。簡單實用。當你的查詢條件有數十個的時候,這種方法就太方便啦。當然這個只是思路具體還是要完善的。比如實現or操作或者group by操作等等。還可以把這個拼接字串的方法寫成一個積累,這樣這個AttributeClass就會自己來拼接字串啦!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.