Mam bardzo proste LINQ do kwerendy SQL w C#:LINQ to SQL dziesiętne Parametr
int acctNum = 12345;
var query = from p in db.table
where p.ACCT_NO == acctNum
select p;
ta generuje następujące 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
z jakiegoś powodu, to trwa niezwykle długo czas do uruchomienia (kilka minut). Jeśli uruchomię równoważne zapytanie w zarządzaniu studio (wybierz * z tabeli, gdzie acct_no = 12345), zajmuje mniej niż sekundę na bardzo dużej tabeli (~ 7 mm wierszy). Po kilku wykopaliskach za pomocą profilera SQL odkryłem, że linq przechodzi przez parametr acctNum jako dziesiętny (29,0), podczas gdy pole jest przechowywane w bazie danych jako numeryczne (18,0). Jeśli wziąłem wygenerowany SQL i po prostu zmieniłem typ parametru z dziesiętnego na liczbowy, to działa w mniej niż sekundę. W profilerze widzę, że wersja linq używa prawie 2 milionów odczytów w porównaniu do około 400 dla kwerendy parametrów numerycznych. Jak zmusić Linq, aby przekazał ten parametr jako numeryczny zamiast dziesiętnego?
Masz na myśli typ danych SQL w bazowym polu bazy danych? Jest to numeryczne (18,0). – maxpower47
Nie, mam na myśli typ właściwości 'ACCT_NO' na dowolnym typie' p'. –
W VS, p.ACCT_NO pokazuje się jako dziesiętny. Jak mogę to zmienić? – maxpower47