ROW_NUMBER() 使用 ExecuteStoreQuery 的解决方法 神秘结果错误

发布于 2025-01-05 11:09:49 字数 1160 浏览 4 评论 0原文

我正在使用 EF4.0 来做一个非常基本的查询。我已经确认我的表中引用的所有列都是 Int (我们不使用 bigint 或smallint),所以我排除了这一点。我尝试将类型更改为 Int64,然后它抱怨转换为 Int32。这让我相信“问题不是问题”类型的场景。 EF系统抱怨什么?

public class clsResult
{
    public Int32 PkId { get; set; }
    public Int32 FkId { get; set; }
    public Int32 Threshold { get; set; }
}

var qry = db.ExecuteStoreQuery<clsResult>(@"SELECT PkId, FkId, Threshold
                                        FROM (SELECT ROW_NUMBER() OVER (PARTITION BY FkId ORDER BY PkId ASC) AS Threshold, *
                                              FROM ClientTrans
                                        ) AS T1
                                        WHERE (Threshold <= 3)
                                        AND (ClientID IN (  SELECT Id 
                                                            FROM ClientProfile
                                                            WHERE (p.Login LIKE 'WEBS%')))
                                        AND (DateRpt >= @STARTDATE)
                                        AND (DateRpt <= @ENDDATE)", SqlParams).ToList();

产生错误: 从具体化“System.Int64”类型到“System.Int32”类型的指定转换无效。

I am using EF4.0 to do in my mind a very basic query. I have confirmed that all columns reference in my tables are Int (we don't use bigint nor smallint) so I ruled that out. I have tried changing the types to Int64 which it then complains about casting to Int32. This leads me to believe the "issue is not the issue" type scenario. What is the EF system complaining about?

public class clsResult
{
    public Int32 PkId { get; set; }
    public Int32 FkId { get; set; }
    public Int32 Threshold { get; set; }
}

var qry = db.ExecuteStoreQuery<clsResult>(@"SELECT PkId, FkId, Threshold
                                        FROM (SELECT ROW_NUMBER() OVER (PARTITION BY FkId ORDER BY PkId ASC) AS Threshold, *
                                              FROM ClientTrans
                                        ) AS T1
                                        WHERE (Threshold <= 3)
                                        AND (ClientID IN (  SELECT Id 
                                                            FROM ClientProfile
                                                            WHERE (p.Login LIKE 'WEBS%')))
                                        AND (DateRpt >= @STARTDATE)
                                        AND (DateRpt <= @ENDDATE)", SqlParams).ToList();

Error Produced:
The specified cast from a materialized 'System.Int64' type to the 'System.Int32' type is not valid.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

绳情 2025-01-12 11:09:49

根据文档,返回类型为row_number() 是 bigint

因此,您应该只更改 Threshold 的类型。

As per documentation, return type of row_number() is bigint.

Therefore, you should only change type of Threshold.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文