LinQ如何将像1这样的整数更改为字符串001

Eri*_*ric 3 c# linq

我的数据库中有一个包含四列的表:

string: year
string: weeknr
int:    number
Run Code Online (Sandbox Code Playgroud)

在其他表中,我将这些列合并yywwnnn为一个字符串。

数字列是标识列。

现在,我想从一个表中检索一些要与上述表连接的记录。

就像是:

from R in db.Requests
join RN in db.RequestNumbers on R.RequestNumber equals (RN.Year + RN.Weeknr + RN.Number)
Run Code Online (Sandbox Code Playgroud)

但是,当然RN.Number是一个整数,我需要它是3位数字的字符串。

所以:
16 07 1 ==> 1607001
16 07 10 ==> 1607010
16 07 100 ==> 1607100

我已经试过了:

from R in db.Requests
join RN in db.RequestNumbers on R.RequestNumber equals (RN.Year + RN.Weeknr + (RN.Number.toString().PadLeft(3,char.Parse("0")))
Run Code Online (Sandbox Code Playgroud)

但是PadLeft无法识别。
还有其他解决方案吗?

[编辑]这是完整的方法:

public List<RequestList> getMyRequests(string userID)
{
  var result = (from R in db.Requests
                join MT in db.MainTorsList on R.Category equals MT.MainTorsListID into MTL
                from MT in MTL.DefaultIfEmpty()
                join ST in db.SubTorsList on R.RequestType equals ST.SubTorsListID into STL
                from ST in STL.DefaultIfEmpty()
                join S in db.StatusList on R.RequestStatus equals S.StatusListID into SL
                from S in SL.DefaultIfEmpty()
                join RN in db.RequestNumber on R.RequestNumber equals RN.Year + RN.Week + (RN.Number.ToString().PadLeft(3, char.Parse("0"))) into RNL
                from RN in RNL.DefaultIfEmpty()
                where R.CreatedBy == userID && RN.Removed == false

                select new
                {
                  RequestID = R.RequestID,
                  RequestDate = R.CreatedOn,
                  RequestNumber = R.RequestNumber,
                  Category = MT.Name,
                  RequestType = ST.Name,
                  Description = R.RequestDescription,
                  Status = S.Name,
                  Options = ""
                }
                );

  List<RequestList> requests = (List<RequestList>)result.ToList().ToNonAnonymousList(typeof(RequestList));

  return requests;
}
Run Code Online (Sandbox Code Playgroud)

错误信息:

Additional information: LINQ to Entities does not recognize the method 'System.String PadLeft(Int32, Char)' method, and this method cannot be translated into a store expression.
Run Code Online (Sandbox Code Playgroud)

Iva*_*oev 6

诀窍是使用DbFunctions.Right这样

DbFunctions.Right("00" + RN.Number, 3)
Run Code Online (Sandbox Code Playgroud)

也就是说,在开头添加足够的零,并从结尾开始获取确切的长度。

LINQ to Entities支持所有使用的方法(至少在最近的EF6.1.3版本中)。