無論使用int還是varchar,對于Status的多選查詢都是不易應(yīng)對的。舉例,常規(guī)思維下對CustomerStatus的Enum設(shè)置如下:
復(fù)制代碼 代碼如下:
[Serializable]
public enum CustomerStatus
{
New = 0,
Active = 1,
Overdue = 2,
Suspended = 3,
Closing = 4,
Closed = 5
}
在數(shù)據(jù)庫中以int形式存儲了Status值。
如果我在頁面中想一次搜索狀態(tài)為Active,Overdue和Suspended狀態(tài)的Customer,該怎么辦?程序是不是得把這三個狀態(tài)值
拼成字符串傳遞給SQL去處理?雖然能實現(xiàn),但是相當(dāng)?shù)托А?
現(xiàn)在給出一個標(biāo)準(zhǔn)解決方案:
(1). 所有可能被用作搜索條件的枚舉都應(yīng)按如下位運算方式定義。
復(fù)制代碼 代碼如下:
public enum CustomerStatus
{
New = 1,
Active = 11,
Overdue = 12,
Suspended = 13,
Closing = 14,
Closed = 15
}
(2). 在數(shù)據(jù)庫設(shè)計時,Status的字段必須為int型。
這樣當(dāng)我們做多選查詢時@Status的Value= CustomerStatus.Active | CustomerStatus. Overdue| CustomerStatus. Suspended
(3). 查詢語句如下:
復(fù)制代碼 代碼如下:
Select *
From Customer
Where [Status] @Status = [Status]
如果@Status可為null時,
復(fù)制代碼 代碼如下:
Select *
From Customer
Where ( @Status is null Or [Status] @Status = [Status])
用這樣一條簡單的語句,就可以獲取到所有符合@Status要求的數(shù)據(jù)行。
您可能感興趣的文章:- C# 位運算符整理
- Erlang的運算符(比較運算符,數(shù)值運算符,移位運算符,邏輯運算符)
- shell 基本計算、邏輯運算、位運算詳解
- c語言中用位運算實現(xiàn)加法技巧介紹
- Java中位運算(移位、位與、或、異或、非) 的簡單實例
- C#枚舉中的位運算權(quán)限分配淺談
- C語言位運算符:與、或、異或、取反、左移與右移詳細(xì)介紹
- 詳細(xì)介紹Python語言中的按位運算符
- JavaScript按位運算符的應(yīng)用簡析
- 圖文詳解C語言位運算基礎(chǔ)知識