gpt4 book ai didi

c# - LINQ to SQL 十进制参数

转载 作者:太空狗 更新时间:2023-10-29 20:29:36 24 4
gpt4 key购买 nike

我在 C# 中有一个非常简单的 linq to sql 查询:

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

出于某种原因,这需要很长时间才能运行(几分钟)。如果我在 management studio 中运行等效查询(select * from table where acct_no = 12345),它在非常大的表(~7MM 行)上花费的时间不到一秒。在使用 SQL 探查器进行一些挖掘之后,我发现 linq 将 acctNum 参数作为 Decimal(29,0) 传递,而该字段作为 Numeric(18,0) 存储在数据库中。如果我使用生成的 SQL 并将参数类型从十进制更改为数字,它会在不到一秒的时间内运行。在探查器中,我可以看到 linq 版本使用了将近 200 万次读取,而数字参数查询使用了大约 400 次读取。如何强制 linq 将此参数作为数字而不是小数传递?

最佳答案

问题很可能出在 p.ACCT_NO 的类型上(换句话说,它可能是作为 float 字类型生成的)。确保此属性的类型也为 int,它应该可以工作。

关于c# - LINQ to SQL 十进制参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1364169/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com