Есть ли код, который позволяет мне получить результат следующего SQL-запроса в linq?

#c# #linq

#c# #linq

Вопрос:

Я пытаюсь выполнить следующий SQL-запрос и сохранить результат в переменной, используя linq, но я не смог найти способ сделать это?

Запрос очень хорошо работает на sql Server, но когда я пытаюсь выполнить это с помощью 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. Почему бы просто не выполнить тот же точный запрос из .NET? И какой результат вы получаете сейчас, который не соответствует вашим потребностям?

2. если это может быть выполнено, я не знаю, как это сделать, я пытаюсь это сделать с помощью linq

3. Вы не ответили на мой второй вопрос. Пожалуйста, убедитесь, что вы прочитали комментарий и полностью обратились к нему, чтобы людям не приходилось повторяться.

Ответ №1:

Я думаю, вам нужно было бы разбить это на две отдельные части:

Сначала получите следующий идентификатор последовательности из базы данных:

 SELECT NextSecuenceId
FROM LenderSequences
WHERE LenderId = '30' AND TypeDocumentId = '1'
  

Вы можете получить это значение из базы данных, как пожелаете, либо используя ADO.NET для выполнения SQL напрямую или с использованием ORM-подобной Entity Framework.

Следующий шаг — отформатировать его:

 // 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}";
  

Комментарии:

1. но вопрос, если в nextsecuenceId у меня есть значение 1000, например, я исключу 0 слева

2. @Frankenstainero Да, этот код будет обрабатывать этот сценарий. Пример: dotnetfiddle.net/wCxLhh

3. Спасибо за помощь