将int列表转换为sql binary(8)列表

时间:2012-04-13 10:14:22

标签: c# .net linq ado.net type-conversion

我有一个包含richTextBox和按钮的简单应用程序。 用户将数字(整数)输入richTextBox(每行一个数字)。

当他点击按钮时我想生成一个SQL查询。

基本上,如果我将整数传递给像这样的查询:

SELECT price from products where ID IN (1, 2, 3, 4)

这是用户在richTextBox中输入1,2,3,4作为行。

但我想传递二进制(8)而不是整数。

这是我原来的代码行:

cmdString += " IN (" + string.Join(", ", richTextBox1.Lines) + ") ";

我试图用这样的LINQ来改变它:

cmdString += " IN ("
+ string.Join(", ", richTextBox1.Lines.Select(c => 
    { c = "0x"+Convert.ToString(Convert.ToInt32(c), 16); 
     return c; 
    }).ToArray())
+ ") ";

我想得到什么:

例如转换:

 1   to  0x0000000000000001
30   to  0x000000000000001E

我希望你明白这一点。

更新

我做到了这一点:

textBox1.Text = string.Join(", ", richTextBox1.Lines.Select(c =>
    {
        c = "0x" + "0000000000000000".Substring(0, (16 - Convert.ToString(Convert.ToInt32(c), 16).Length)) + Convert.ToString(Convert.ToInt32(c), 16);
        return c;
    }).ToArray());

有关如何删除第二个Convert.ToString(Convert.ToInt32(c))用法的任何想法?或者也许以另一种方式做到这一点?

2 个答案:

答案 0 :(得分:1)

我将在foreach循环中执行此操作:

var query = "Select ... In( ";

foreach(var item in Lines)
{
   int a = 0;
   if (!int.TryParse(item, out a))
     throw new IllegalInputException();
   query += "0x" + Convert.ToString(a, 16).PadLeft(16, '0');
}
...

或者您可以在您的linq查询中执行此操作但不容易阅读为foreach:

cmdString += " IN (" 
+ string.Join(", ", richTextBox1.Lines.Select(c => 
    { c = "0x"+Convert.ToString(Convert.ToInt32(c), 16)
               .PadLeft(16, '0'); 
     return c; 
    }).ToArray())  

+ ") ";

答案 1 :(得分:0)

var binaryStrings = richTextBox1.Lines
                    .Select(str => String.Format("'0x{0}'", 
                                   Convert.ToString(int.Parse(str), 16)));
var cmd = String.Format("SELECT price from products where ID IN ({0})", 
                                   String.Join(",", binaryStrings));

Convert.ToString Method (Int32, Int32)