DataTable.Select () 使用問題!能用IN 語句嗎!


DataTable.Select("ipadd ='220.176.23.218' ");  這樣查有數據

string ip="220.176.23.218,220.176.43.218, 220.176.23.118,220.176.23.208";
DataTable.Select("ipadd in('" + ip + "') ");   這樣就不行   是不支持  IN 嗎??

7 个解决方案

#1


支持下文中提到的語法,但是沒有IN:

________________________________________________________________________

Expression 屬性的一個用途是創建計算出的列。例如,若要計算稅值,就要將單價乘以給定地區的稅率。由於各地稅率不同,不可能將單一的稅率放在列中;於是便用 Expression 屬性來計算這個值,如下面的 Visual Basic 代碼所示:

DataSet1.Tables("Products").Columns("tax").Expression = "UnitPrice * 0.086"

第二個用途是創建聚合列。類似於計算出的值,聚合基於 DataTable 中的整個行集執行操作。一個簡單的示例是對返回到集中的行數進行計數,這也就是您可能用來對某個特定銷售人員完成的交易次數進行計數的方法,如下面的 Visual Basic 代碼所示:

DataSet1.Tables("Orders").Columns("OrderCount").Expression = "Count(OrderID)"

表達式語法

在創建表達式時,使用 ColumnName 屬性來引用列。例如,如果一個列的 ColumnName 是“UnitPrice”(單價),而另一個是“Quantity”(數量),則表達式將是:

"UnitPrice * Quantity"

在為篩選器創建表達式時,將字符串放到單引號中:

"LastName = 'Jones'"

下面的字符是特殊字符,如下面所解釋的,如果它們用於列名稱中,就必須進行轉義:

\n (newline)

\t (tab)

\r (carriage return)

~

(

)

#

\

/

=

>

<

+

-

*

%

&

|

^

'

"

[

]

如果列名稱包含上面的字符之一,該名稱必須用中括號括起來。例如,若要在表達式中使用名為“Column#”的列,應寫成“[Column#]”:

Total * [Column#]

由於中括號是特殊字符,如果它是列名稱的組成部分,必須使用斜杠 ("\") 將中括號轉義。例如,名為“Column[]”的列應寫成:

Total * [Column[\]]

(只有第二個中括號必須轉義。)

用戶定義的值

用戶定義的值可以用在將與列值進行比較的表達式內。字符串值應放在單引號內。日期值應放在磅符號 (#) 內。對於數值,允許使用小數和科學記數法。例如:

"FirstName = 'John'"

"Price <= 50.00"

"Birthdate < #1/31/82#"

對於包含枚舉值的列,將值強制轉換為整數數據類型。例如:

"EnumColumn = 5"

運算符

使用布爾值 AND、OR 和 NOT 運算符時允許串聯。可以使用括號來組合子句和強制優先級。AND 運算符優先於其他運算符。例如:

(LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John'

在創建比較表達式時,允許使用下列運算符:

<

>

<=

>=

<>

=

IN

LIKE

在表達式中還支持下列算術運算符:

+(加)

-(減)

*(乘)

/(除)

%(模數)

字符串運算符

若要連接字符串,請使用 + 字符。字符串比較是否區分大小寫由 DataSet 類的 CaseSensitive 屬性的值來確定。但是,可以用 DataTable 類的 CaseSensitive 屬性重寫此值。

通配符

在 LIKE 比較中,* 和 % 兩者可以互換地作為通配符。如果 LIKE 子句中的字符串包含 * 或 %,那么這些字符應用中括號([])對其進行轉義。如果子句中有中括號,那么中括號字符應用中括號對其進行轉義(例如 [[] 或 []])。在模式的開頭和結尾,或者在模式的結尾,或在模式的開頭允許使用通配符。例如:

"ItemName LIKE '*product*'"

"ItemName LIKE '*product'"

"ItemName LIKE 'product*'"

在字符串的中間不允許使用通配符。例如,不允許 'te*xt'。

父/子關系引用

通過在列名稱前面加 Parent,就可以在表達式中引用父表。例如,Parent.Price 引用父表的名為 Price 的列。

通過在列名稱前面加一個 Child,就可以在表達式中引用子表中的列。但是,因為子關系可以返回多行,所以必須在聚合函數中包括對子列的引用。例如,Sum(Child.Price) 將返回子表中名為 Price 的列的總和。

如果某個表有多個子表,則語法是:Child(RelationName)。例如,如果某個表有兩個子表,它們的名稱分別為 Customers 和 Orders,則 DataRelation 對象被命名為 Customers2Orders,引用將為:

Avg(Child(Customers2Orders).Quantity)

聚合

支持下列聚合類型:

Sum(求和)

Avg(平均)

Min(最小值)

Max(最大值)

Count(計數)

StDev(統計標准偏差)

Var(統計方差)。

聚合通常沿着關系執行。通過使用上面列出的函數之一和上面“父/子關系引用”中詳述的子表列,來創建聚合表達式。例如:

Avg(Child.Price)

Avg(Child(Orders2Details).Price)

聚合也可以在單個表上執行。例如,若要為名為“Price”的列中的數字創建匯總,就用:

Sum(Price)

注意   如果使用一個表來創建聚合,將沒有組合功能。相反,所有行都在列中顯示相同的值。
如果表沒有行,聚合函數將返回空引用(Visual Basic 中為 Nothing)。

數據類型總是可以通過檢查列的 DataType 屬性來確定。還可以使用 Convert 函數來轉換數據類型,如下所示。

FUNCTIONS 

還支持下列函數:

CONVERT 

描述 將給定表達式轉換為指定的 .NET Framework 類型。 
語法 Convert(expression, type) 
參數 expression — 要轉換的表達式。 
type — 值將轉換成的 .NET Framework 類型。
 

例如:myDataColumn.Expression="Convert(total, 'System.Int32')"

所有轉換都是有效的,只有下列情況例外:Boolean 只能與 Byte、SByte、Int16、Int32、Int64、UInt16、UInt32、UInt64、String 和它本身相互轉換。Char 只能與 Int32、UInt32、String 和它本身相互轉換。DateTime 只能與 String 和它本身相互轉換。TimeSpan 只能與 String 和它本身相互轉換。

LEN 

描述 獲取字符串的長度 
語法 LEN(expression) 
參數 expression — 要計算的字符串。 

例如:myDataColumn.Expression="Len(ItemName)"

ISNULL 

描述 檢查表達式並返回已檢查的表達式或返回替換值。 
語法 ISNULL(expression, replacementvalue) 
參數 expression — 要檢查的表達式。 
replacementvalue — 如果表達式為空引用 (Nothing),則返回 replacementvalue。
 

例如:myDataColumn.Expression="IsNull(price, -1)"

IIF 

描述 根據邏輯表達式的結果,獲取兩個值之一。 
語法 IIF(expr, truepart, falsepart) 
參數 expr — 要計算的表達式。 
truepart — 表達式為真時返回的值。

falsepart — 表達式為假時返回的值。
 

例如:myDataColumn.Expression = "IIF(total>1000, 'expensive', 'dear')

TRIM 

描述 移除所有前導的和后綴的空格字符,如\r、\n、\t、' ' 
語法 TRIM(expression) 
參數 expression — 要剪裁的表達式。 

SUBSTRING 

描述 獲取從字符串中的指定點開始,具有指定長度的子字符串。 
語法 SUBSTRING(expression, start, 
length)
 
參數 expression — 子字符串的源字符串。 
start — 指定子字符串開始位置的整數。

length — 指定子字符串長度的整數。
 

例如:myDataColumn.Expression = "SUBSTRING(phone, 7, 8)"

#2


你仔細看一下就會發現:
前面相當於ipadd ='220.176.23.218';
后面相當於ipadd in('220.176.23.218,220.176.43.218, 220.176.23.118,220.176.23.208')
后面‘’中都是一個字符串,並不是分開的。
正確應該是ipadd in('220.176.23.218','220.176.43.218', '220.176.23.118','220.176.23.208')

#3


sorry~  應該是支持 IN 語法的~~

#4


我試試

#5


法錯誤:“220.176”運算符后缺少操作數。 
說明: 執行當前 Web 請求期間,出現未處理的異常。請檢查堆棧跟蹤信息,以了解有關該錯誤以及代碼中導致錯誤的出處的詳細信息。 

異常詳細信息: System.Data.SyntaxErrorException: 語法錯誤:“220.176”運算符后缺少操作數。

源錯誤: 


行 141:            DataRow[] DrIp ;
行 142:            string ip = "'220.176.23.218','220.176.43.218', '220.176.23.118','220.176.23.208'";
行 143:            DrIp = dtBase.Select("ipadd in ('" + ip + "') ");

 

#6


string ip = "'220.176.23.218','220.176.43.218', '220.176.23.118','220.176.23.208'";
DrIp = dtBase.Select("ipadd in (" + ip + ") ");

#7


多謝  揭帖

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com