Tôi có một LINQ rất đơn giản để truy vấn sql trong C#:LINQ to SQL Decimal Parameter
int acctNum = 12345;
var query = from p in db.table
where p.ACCT_NO == acctNum
select p;
này tạo ra các SQL sau:
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
Đối với một số lý do, điều này được thực thi một cực kỳ dài thời gian để chạy (vài phút). Nếu tôi chạy một truy vấn tương đương trong studio quản lý (chọn * từ bảng nơi acct_no = 12345), phải mất chưa đầy một giây trên một bảng rất lớn (~ 7MM hàng). Sau khi một số đào với lược tả SQL, tôi thấy rằng LINQ đang chuyển tham số acctNum dưới dạng thập phân (29,0) trong khi trường được lưu trữ trong cơ sở dữ liệu dưới dạng số (18,0). Nếu tôi lấy SQL được sinh ra và chỉ thay đổi kiểu tham số từ thập phân sang số, nó chạy trong chưa đến một giây. Trong profiler, tôi có thể thấy rằng phiên bản LINQ sử dụng gần 2 triệu lượt đọc so với khoảng 400 cho truy vấn tham số. Làm thế nào tôi có thể buộc LINQ chuyển tham số này dưới dạng số thay vì số thập phân?
Bạn có phải là loại dữ liệu SQL của trường cơ sở dữ liệu cơ bản không? Một số của nó (18,0). – maxpower47
Không, ý tôi là loại thuộc tính 'ACCT_NO' trên bất kỳ loại' p' nào. –
Trong VS, p.ACCT_NO hiển thị dưới dạng Thập phân. Làm thế nào tôi có thể thay đổi điều đó? – maxpower47