VB.NET需要帮助执行'>'对字符串的操作

时间:2013-09-24 00:06:26

标签: vb.net select dataset

我正在尝试在数据集上执行以下select语句...

Dim weight As Double

weight = 15

dsMain.Tables(0).Select(weight & " >= MINIMUM_WEIGHT and " & weight & " < MAXIMUM_WEIGHT", "USER_NAME ASC")

MINIMUM_WEIGHT和MAXIMUM_WEIGHT都是varchars(我不能在数据库中更改它),我的变量权重是double。这会导致以下错误......

“无法执行'&gt;'对System.String和System.Int32的操作。“

如果我将重量转换为字符串,那么我会遇到10被认为小于5的情况。有关如何处理这种情况的任何建议吗?

谢谢!

3 个答案:

答案 0 :(得分:0)

将x_WEIGHT转换为适当的数字类型。字符串必须转换为数字;将数字转换为字符串,然后进行比较将导致字典/字典顺序,如发现。

虽然我从未在DataSet查询中完成此操作(但必须在各种SQL查询中),但似乎支持Convert(..)。在这种情况下,以下可以执行操作:

query = weight & " >= Convert(MINIMUM_WEIGHT, 'System.Int32')" & _
        " and " & weight & " < Convert(MAXIMUM_WEIGHT, 'System.Int32')"

但是,还要看看如何使用LINQ(来自同一链接)编写查询。如果可以切换,我建议不要使用查询字符串(特别是没有占位符的字符串)。

这是另一个未经测试的查询(这次是使用C#LINQ语法),这可能有效,也可能无效:

var v = from x in dt.AsEnumerable()
        where weight => Convert.ToInt32(x["MINIMUM_WEIGHT"])
            && weight < Convert.ToInt32(x["MAXIMUM_WEIGHT"])
        order by x["USER_NAME"]
        select x;

YMMV。祝你好运!

答案 1 :(得分:0)

根据documentation Select Expression支持CONVERT函数。

这是未经验证但可能有效:

dsMain.Tables(0).Select(weight & " BETWEEN CONVERT(MINIMUM_WEIGHT, 'System.Int32') AND CONVERT(MAXIMUM_WEIGHT, 'System.Int32)'", "USER_NAME ASC")

答案 2 :(得分:0)

 Dim query = dt.Rows.AsEnumerable.Where(Function(dr) 
             weight > CDbl(dr("MINIMUM_WEIGHT").ToString) And 
             weight < CDbl(dr("MAXIMUM_WEIGHT").ToString))

其中dr是DataRow,因此列名必须匹配。