生成序列号的C#实体

生成序列号的C#实体,c#,formatting,C#,Formatting,如果Id为1,我尝试以这种格式生成参考编号0000001。我有一个前缀F和00000,它将被Id从后面覆盖。Id是自动递增的 这是我的方法,但它给出了F-1,等等,我想要F-0000001 public class Function : BaseModel { public Function() { Ref = Sequence; } [ForeignKey("Corporate")] public int CorporateId { g

如果Id为1,我尝试以这种格式生成参考编号0000001。我有一个前缀F和00000,它将被Id从后面覆盖。Id是自动递增的

这是我的方法,但它给出了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;
        }
    }

}

只需将String.Format与一个:

返回:
F-001056

0
是一个零占位符
将零替换为相应的数字(如果有);否则,结果字符串中将显示零。

格式项(
{0:…}
)之外的文本按原样复制到字符串中

该属性应如下所示:

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

尝试使用C#的PadLeft函数,如下所示:

private string Sequence { get{ return String.Format("F-{0:0000000}", Id);}}
private string Sequence
{
    get
    {
        return "F-" + Id.ToString().PadLeft(6,"0");
    }
}
使用,在属性中传递以下格式字符串,如下所示:

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

更改“D7”以指示要填充多少个零。

这会毫无原因地生成4个临时字符串。对
String.Format
的单个调用将生成所需的字符串。如果ID为1000,那么很遗憾,这将无法工作。结果会是:“F-0000001000”@PhillipMorton这个答案不是最好的,但它不会像你描述的那样工作。第一个参数(
int totalWidth
)将只填充,直到达到该限制,因此对于建议的ID 1000,
PadLeft(6,'0')
的结果将是“001000”一个旁注-您的问题与
实体框架
没有任何共同之处,请删除该标记。这仍将生成一个临时字符串
String.Format
不会保存ID,但在保存时只保存零