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