У меня есть очень простой LINQ к SQL-запрос в C#:LINQ к SQL Decimal параметров
int acctNum = 12345;
var query = from p in db.table
where p.ACCT_NO == acctNum
select p;
Это создает следующий SQL:
exec sp_executesql N'SELECT [t0].field1, [t0].field2, [t0].ACCT_NO
FROM [dbo].[table] AS [t0]
WHERE [t0].[ACCT_NO] = @p0', N'@p0 decimal(29,0)', @p0 = 12345
По какой-то причине, это занимает невероятно долго время запуска (несколько минут). Если я запускаю эквивалентный запрос в студии управления (выберите * из таблицы, где acct_no = 12345), она занимает менее секунды в очень большой таблице (строки ~ 7MM). После некоторого копания с профилировщиком SQL я обнаружил, что linq передает параметр acctNum как десятичный (29,0), а поле хранится в базе данных как числовое (18,0). Если я беру сгенерированный SQL и просто изменяю тип параметра с десятичной на числовую, он работает менее чем за секунду. В профилировщике я вижу, что версия linq использует почти 2 миллиона чтений против 400 для запроса числовых параметров. Как заставить linq передать этот параметр как числовой, а не десятичной?
Вы имеете в виду тип данных SQL для базового поля базы данных? Его числовое (18,0). – maxpower47
Нет, я имею в виду тип свойства 'ACCT_NO' для любого типа' p'. –
В VS, p.ACCT_NO отображается как десятичный. Как я могу это изменить? – maxpower47