簡體   English   中英

從具體化的“System.Int32”類型到“System.Double”類型的指定轉換無效

[英]The specified cast from a materialized 'System.Int32' type to the 'System.Double' type is not valid

執行以下查詢時,出現錯誤:

從具體化的“System.Int32”類型到“System.Double”類型的指定轉換無效。

var data = ctx.tblTO
                   .Where(m => m.Id == Id)
                   .GroupBy(m => m.EmployeeId)
                   .Select(m => new
                   {
                       workDay = m.Sum(k => k.WorkDay),
                       onDutyDay = m.Sum(k => k.OnDutyDay),
                       holiDay = m.Sum(k => k.Holiday)
                   })
                   .FirstOrDefault();

WorkDayOnDutyDayHoliday的數據類型是double 這里沒有Int32 ,為什么會出現這個錯誤?

我該如何解決這個錯誤?

public class TO
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }           
    public int EmployeeId { get; set; }
    public double WorkDay { get; set; }
    public double OnDutyDay { get; set; }
    public double Holiday { get; set; }
}

我認為數據庫表中列的數據類型是Int32但你的數據模型有double 您需要將數據模型的數據類型更改為int materialized意味着它在數據庫上運行查詢時得到的類型。

首先確保您的模型和表列數據類型相同。

嘗試將您的查詢更改為此。

var data = ctx.tblTO
           .Where(m => m.Id == Id)
           .GroupBy(m => m.EmployeeId)
           .Select(m => new
           {
               workDay = m.Select(k => k.WorkDay).DefaultIfEmpty(0).Sum(),
               onDutyDay = m.Select(k => k.OnDutyDay).DefaultIfEmpty(0).Sum(),
               holiDay = m.Select(k => k.Holiday).DefaultIfEmpty(0).Sum()
           })
           .FirstOrDefault();

如果集合為空,它將返回一個值為 0 的元素,然后應用總和。

對我來說,我從 EF 6 調用了一個stored procedure ,其中我寫了一個 poco,但我沒有寫 sproc。 我需要查看所有具有字段返回數據類型的表。 然后將我的 Poco 從 int 更改為 boolean。

public Boolean Active { get; set; }

除了其他答案之外,我還遇到了另一種情況,我遇到了同樣的錯誤。 也就是說,在我們的存儲過程中, bigint被轉換為十進制,而在C# ,同樣的事情被轉換為 int64。 看:

SELECT Cast(@Request_Id as decimal) AS RetValue

我所做的是將查詢更改為:

SELECT @Request_Id AS RetValue

所以,我刪除了額外的演員表,問題就消失了。 不知何故,它可能會引發某種算術異常,但還不太確定。 如果我知道確切原因,將很快更新。

PS:我的@Request_Id變量是bigint類型。

DECLARE @Request_Id bigint = 0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM