我正在尝试执行以下sql查询,并使用linq将结果存储在变量中,但是我找不到解决方法?
该查询在sql服务器上工作得很好,但是当我尝试使用linq进行查询时,并没有得到我期望的结果,
查询如下,
SELECT ('PN'+CONVERT(VARCHAR(5),LenderId)+RIGHT('00000000'+CONVERT(VARCHAR(9),NextSecuenceId+1,0),(9)))
FROM LenderSequences WHERE LenderId = '30' AND TypeDocumentId = '1'
这是我到目前为止拥有的linq代码
from LenderSequences in db.LenderSequences
select new {
Column1 = ("PN" + SqlFunctions.StringConvert((Double)LenderSequences.LenderId) + ("00000000" + SqlFunctions.StringConvert((Double)LenderSequences.NextSecuenceId + 1)).Substring(("00000000" + SqlFunctions.StringConvert((Double)LenderSequences.NextSecuenceId + 1)).Length-9,9))
}
这是我希望你回来的结果
PN30000000001
答案 0 :(得分:1)
我认为您需要将其分解为两部分:
首先从数据库中获取下一个序列ID:
SELECT NextSecuenceId
FROM LenderSequences
WHERE LenderId = '30' AND TypeDocumentId = '1'
您可以根据需要从数据库中获取此值,或者使用ADO.NET直接执行SQL,或者使用ORM(例如实体框架)。
下一步是格式化它:
// Would already have this value, or could also get it from the database
var lenderId = 3;
// This value would come from your database, as above
var nextSeqId = nextSecuenceId;
// Add the zero padding as necessary
// Assuming you want the total length to be 10 digits
var tmp = lenderId.ToString().PadRight(10 - nextSeqId.ToString().Length, '0');
// Combine all the values to create the required format
var formattedValue = $"PN{tmp}{nextSeqId}";