将整数列表转换为 sql 二进制(8) 列表
本文关键字:列表 二进制 整数 转换 sql | 更新日期: 2023-09-27 18:31:12
我有一个简单的应用程序,它有richTextBox和按钮。用户在富文本框中输入数字(整数)(每行一个数字)。
当他单击按钮时,我想生成一个sql查询。
基本上,如果我像这样将整数传递到查询中,它可以工作:
SELECT price from products where ID IN (1, 2, 3, 4)
这是当用户在富文本框中输入 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))
用法?或者也许以另一种方式进行?
我将在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 查询中执行此操作,但不像每个查询那样容易阅读:
cmdString += " IN ("
+ string.Join(", ", richTextBox1.Lines.Select(c =>
{ c = "0x"+Convert.ToString(Convert.ToInt32(c), 16)
.PadLeft(16, '0');
return c;
}).ToArray())
+ ") ";
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)