2017-06-28 11 views
-1

IDが1の場合、このフォーマット0000001のRef番号を生成しようとしています。接頭辞Fと00000がIDの後ろから上書きされます。 IDはautoIncrementですC#エンティティを生成するシーケンシャル番号

これは私のアプローチですが、F-1などにはF-0000001が必要です。

public class Function : BaseModel 
{ 
    public Function() 
    { 
     Ref = Sequence; 
    } 

    [ForeignKey("Corporate")] 
    public int CorporateId { get; set; } 

    public virtual Corporate Corporate { get; set; } 
    public DateTime StartDate { get; set; } 
    public DateTime EndDate { get; set; } 

    public string Title { get; set; } 

    [ForeignKey("User")] 
    public int UserId { get; set; } 


    public virtual User User { get; set; } 
    public bool Approved { get; set; } = false; 
    public bool Completed { get; set; } = false; 
    public DateTime DateCreated { get; set; } = DateTime.Now; 
    public string Note { get; set; } 
    public string ContactPerson { get; set; } 
    public string ContactPersonPhone { get; set; } 
    public string ContactPersonEmail { get; set; } 
    public string Ref { get; set; } 

    private string Sequence 
    { 
     get 
     { 
      var seq = "F" + "-" + Id; 
      seq = seq.Replace(" ", "000000"); 
      return seq; 
     } 
    } 

} 
+0

サイドノート - あなたの質問に 'entity-framework'と共通するものはありません。そのタグを削除してください。 –

答えて

3

だけcustom format stringとString.Formatのを使用する:

String.Format("F-{0:0000000}", 1056) 

戻り値:F-001056

0Replaces the zero with the corresponding digit if one is present; otherwise, zero appears in the result string.

ゼロプレースホルダ形式項目({0:...})外部テキストがあります現状のまま文字列にコピーされます。

プロパティには、次のようになります。

private string Sequence { get{ return String.Format("F-{0:0000000}", Id);}} 

または

private string Sequence => String.Format("F-{0:0000000}", Id); 
+0

大変感謝しました。 – rilly009

+0

ただし、保存時にIDを保存しないでください。 – rilly009

1

は次のようにC#のPadLeft機能を使用してみてください:

private string Sequence 
{ 
    get 
    { 
     return "F-" + Id.ToString().PadLeft(6,"0"); 
    } 
} 
+0

これは理由なしで4つの一時的な文字列を生成します。 'String.Format'を一回呼び出すと、目的の文字列が生成されます –

+0

これは残念ながらうまくいきません。IDが1000の場合は想像してください。結果は" F-0000001000 " –

+1

@PhillipMortonです。しかし、それはあなたが記述する方法ではうまくいかないでしょう。最初のパラメータ( 'int totalWidth')は、その限界に達するまでパッドするだけなので、提案されたIDが1000の場合、' PadLeft(6、 '0') 'の結果は" 001000 " – maccettura

1

使用Int32.ToString、中に次の形式の文字列を渡しますあなたのプロパティは次のとおりです:

private string Sequence => "F-" + Id.ToString("D7"); 

"D7"を変更して、パッドするゼロの数を指定します。

+1

になります。一時的な文字列。 'String.Format'はできません –

関連する問題