是否有代码允许我在linq中获取以下sql查询的结果?

时间:2019-04-03 19:43:49

标签: c# linq

我正在尝试执行以下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

1 个答案:

答案 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}";