c#中的增量计数

时间:2016-01-25 06:34:13

标签: c# linq

我正在尝试创建一个查询。这是代码

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的数量可能会有所不同吗?

5 个答案:

答案 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操作,可以使用LINQEnumerable.Rangestring.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);