2

Я использую EF4.0, чтобы сделать на мой взгляд очень простой запрос. Я подтвердил, что все ссылки на колонки в моих таблицах - Int (мы не используем bigint или smallint), поэтому я решил это. Я попытался изменить типы на Int64, которые затем жалуются на литье в Int32. Это приводит меня к мысли, что сценарий типа «проблема не является проблемой». О чем жалуется система EF?ROW_NUMBER() Обходной путь с использованием ошибки ExecuteStoreQuery Cryptic Result

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