#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. Спасибо за помощь