我正在尝试创建一个查询。这是代码
string wherequery = "";
int fromcode = Convert.ToInt32(CodeTextBox.Text);
int count = Convert.ToInt32(CountTextBox.Text);
for (int i = 0; i < count; i++)
wherequery += ("'" + (fromcode + i).ToString().PadLeft(8,'0') + "',");
wherequery = wherequery.TrimEnd(",");
我使用for循环来创建IN
查询。是否可以通过LINQ?
输出应为
'0000000087','0000000088','0000000089'
第二件事,我从像0000000087
这样的文本框值中获取代码。当我使用Convert.ToInt32
将其转换为int时,前面的0会消失。
0可能不会消失,因为前面的0的数量可能会有所不同吗?
答案 0 :(得分:1)
我不确定你是否可以在这一点上使用LINQ。以下是我将如何解决此问题的示例:
Dim whereQuery As String = ""
Dim operatorValues As New List(Of String)
Dim startingNumber As String = CodeTextBox.Text
Dim lengthOfNumber As Integer = startingNumber.Length
Dim count As Integer = Convert.ToInt32(CountTextBox.text)
For i As Integer = CInt(startingNumber) To CInt(startingNumber + count - 1)
operatorValues.Add(i.ToString.PadLeft(lengthOfNumber, "0"))
Next
whereQuery &= "IN ('" & Join(operatorValues.ToArray, "','") & "')"
无论如何:为什么你的数据库字段是字符串而不是整数?那么你就不会有前导零的问题。
答案 1 :(得分:1)
不需要导致不必要的前导零的.PadLeft(8,'0')
。
试试以下。
var whereQueryFormat = "Whre columnName IN ({0})";
var wherequery = string.Join
(",",
Enumerable.Range(1, count)
.Select(i => "'" + fromcode + i + "'")
);
wherequery = string.Format(whereQueryFormat, wherequery);
答案 2 :(得分:1)
如果您要删除for
操作,可以使用LINQ
,Enumerable.Range
和string.Join
这样做:
int fromcode = Convert.ToInt32(CodeTextBox.Text);
int count = Convert.ToInt32(CountTextBox.Text);
var words = from i in Enumerable.Range(fromcode, count)
select "'" + i.ToString().PadLeft(8, '0') + "'";
string wherequery = string.Join(",", words);
答案 3 :(得分:1)
如果要使用LINQ获取IN子句,可以使用:
var range = Enumerable.Range(0, count).Select(x =>
string.Format("'{0}'", x.ToString("0000000000")));
var inCluase = string.Format(" IN ({0})", string.Join(",", range));
答案 4 :(得分:1)
你仍然需要使用循环。但是下面的代码解决了你的变量填充零问题。
var enteredValue = "00000088";//get this from the text box
int enteredCount = 10;//get this from the text box
string wherequery = "";
int fromCode = Convert.ToInt32(enteredValue);
string fromCodeStr = fromCode.ToString(CultureInfo.CurrentCulture);
string padZeros = enteredValue.Split(new[] {fromCodeStr}, StringSplitOptions.None)[0];
List<string> searchList = new List<string>();
for (int i = 1; i <= enteredCount; i++)
{
searchList.Add(padZeros + fromCode + i);
}
var searchString = string.Join(",", searchList);