【问题标题】:Increment count in c#c#中的递增计数
【发布时间】:2016-05-01 09:33:46
【问题描述】:

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

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 不应该消失?

【问题讨论】:

  • 你能告诉你传递给 CodeTextBox 和 CountTextBox 的内容吗?编辑:早上太早了。现在我明白了...
  • 关于前导0;整数 0001 等同于 0000001 等同于 1。
  • 无法理解您的问题?它是 SqlCommand 的查询字符串吗?您的实际问题是什么(异常或意外结果)?您的查询参数在哪里(添加更多创建完整查询字符串的代码)?
  • @etalon11,我分别在文本框中传递00000000875
  • @HarshitShrivastava 尝试关注。 var whereQueryFormat = "Whre columnName IN ({0})"; var wherequery = string.Join(",", Enumerable.Range(1, count).Select(i =&gt; "'" + fromcode + i + "'")); wherequery = string.Format(whereQueryFormat, wherequery);

标签: c# linq


【解决方案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, "','") & "')"

无论如何:为什么您的数据库字段是字符串而不是整数?那么前导零就不会有问题了。

【讨论】:

  • VB?谁要求的?
  • @KosalaW: 没人 :D 如果您看不懂,请使用在线转换器 (converter.telerik.com) ;)
  • 哈哈。哦,是的.. 下次我要在 VB 3.0 中写答案。听起来怎么样?
【解决方案2】:

不需要.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);

【讨论】:

    【解决方案3】:

    如果您想删除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);
    

    【讨论】:

      【解决方案4】:

      如果你想使用 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));
      

      【讨论】:

        【解决方案5】:

        您仍然需要为此使用循环。但是下面的代码解决了您的变量填充零问题。

               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);
        

        【讨论】:

          猜你喜欢
          • 2013-04-03
          • 1970-01-01
          • 2021-05-22
          • 1970-01-01
          • 1970-01-01
          • 2020-08-02
          • 1970-01-01
          • 2013-03-27
          • 1970-01-01
          相关资源
          最近更新 更多