2017-11-14 23 views
0

文字列内の数字を増分したい。文字列の数値を増やす方法は?

マイモデル:

public partial class updown 
{ 
    public int id { get; set; } 
    public string number { get; set; } 
} 

マイコントローラ:

[HttpPost] 
public ActionResult Index(updown viewModel) 
{ 
    var lastPO = db.updowns 
        .OrderByDescending(o => o.number) 
        .Select(m => m.number) 
        .FirstOrDefault() ?? "00001"; 

    item.number = lastPO++; // I get an error on this line 
    db.updowns.Add(item); 
    db.SaveChanges(); 

    return View(viewModel); 
} 

エラー:

Operator '++' cannot be applied to operand of type 'string'

期待される結果:

item.number // "00002" 

更新

は現在、削除されたコメントに基づいて、私が持っている:

[HttpPost] 
public ActionResult Index(updown viewModel) 
{ 
    var s = db.updowns 
       .OrderByDescending(o => o.number) 
       .Select(m => m.number) 
       .FirstOrDefault() ?? "00001/S2"; 

    var lastPO = Convert.ToInt32(s.Substring(s.Length - 5 - 3, s.Length - 3)); // * 
    item.number = "EMOC-" + (++lastPO).ToString("00000"); 
    db.updowns.Add(item); 
    db.SaveChanges(); 

    return View(viewModel); 
} 

期待される結果:

item.number // "EMOC-00002/S2" 

しかし、私はライン上のエラーを取得し、私はそれを実行するとき// *をマーク2回目。

+0

質問の明確さが改善されました。まだ助けが必要ですか? – aaron

+1

文字列型をインクリメントしようとしていますが、int型に解析する必要があります。 –

+0

2回目のエラーは何ですか?デバッガを実行すると、 'Convert.ToInt32()'に渡される値は何ですか? – Jasen

答えて

0

あなたのコードをやってみました。私が問題は?? "00001/S2"がエラーをトリガすることがあり、ここで

var s = db.updowns 
       .OrderByDescending(o => o.number) 
       .Select(m => m.number) 
       .FirstOrDefault() ?? "00001/S2"; 

にあると思います enter image description here

罰金です。あなたがここに+ "/S2"が必要

0

Expected result:

item.number // "EMOC-00002/S2" 

(変換することができないだけで文字があるかもしれない)var sでブレークポイントをやってみてください...とs.numberのすべてが値を持っているか、正しい変換可能な値を持っているかどうかを確認:あなたが前のコードを実行したときに、第2の時間がvar s = "EMOC-00002"のでs.Substring(s.Length - 5 - 3, s.Length - 3)"OC-00"代わりの"00002" Sを与えることで何が起こる

item.number = "EMOC-" + (++lastPO).ToString("00000") + "/S2"; 

説明

tring、which Convert.ToInt32()は対処できません。

関連する問題