2

我使用EF4.0在我的腦海中做了一個非常基本的查詢。我已經確認我的表中的所有列引用都是Int(我們不使用bigint和smallint),所以我排除了這一點。我曾嘗試將類型更改爲Int64,然後它將投訴轉換爲Int32。這使我相信「​​問題不是問題」類型的情況。什麼是EF系統抱怨?ROW_NUMBER()使用ExecuteStoreQuery隱藏結果錯誤的解決方法

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」類型無效。

回答

1

根據documentation,返回類型row_number()bigint

因此,您應該只更改Threshold的類型。

+0

謝謝你,那個伎倆! – jjhayter 2012-02-14 19:01:42