2014-03-07 85 views
0

不能隱式轉換類型'short?'以'短'在LocalAmount = t.EmpNo。我用​​但隨後'join'子句將得到一個錯誤,並"incorrect", "type inference failed..."LINQ:不能將short轉換爲short嗎?

public class AccountTransaction 
    { 
     public Int16 LocalAmount { get; set; } 
     public String AccountNumber { get; set; } 
    } 

    public static IEnumerable<AccountTransaction> GetAllTransactions() 
    { 
     using (var context = new SQL_TA_SCOREBOARDEntities1()) 
     { 
      return (from t in context.EmployeeAccesses 
        join acc in context.View_HCM 
         on t.EmpNo equals acc.EmpNo 
        select new AccountTransaction 
        { 
         LocalAmount = t.EmpNo, 
         AccountNumber = acc.EmailAddress 

        }).ToList(); 
     } 
    } 
+0

爲什麼不只是 「上(Int16的)t.EmpNo等於acc.EmpNo」 – Rex

+0

在你的數據庫後端,是什麼想必'EmployeeAccesses.EmpNo'不明確'NOT NULL'。考慮將'public Int16 LocalAmount'改爲'public Int16? LocalAmount'。 – jdphenix

+0

您使用的是LINQ到SQL還是EF?哪個.NET版本? – jdphenix

回答

1

你的錯誤消息指出t.EmpNo是可空詮釋16.見問號後面的短?

'short?' to 'short' - 它說:我不能轉換Int16?Int16問號定義,這個值可以是null

所以,如果你改變你的模型,你並不需要解析什麼,但你需要使用t.EmpNo.Value

public class AccountTransaction 
{ 
    public Int16? LocalAmount { get; set; } 
    public String AccountNumber { get; set; } 
} 
+0

等待對不起,這是我的第二個選擇,並且我在'join'中遇到了錯誤。但是如果我刪除了Convert.ToInt16,我就不能將short轉換爲short。 –

+0

好的,謝謝。現在我明白了「join子句中的一個表達式的類型不正確,類型推斷在調用'join'失敗。」錯誤。現在我該怎麼做? –

0

這可能是因爲EMPNO應該不能爲空,而你的EMPNO的一個是可空數據庫,而另一個不是。確保兩者都不可空。如果由於某種原因,他們有時應該是空的,那麼他們必須在數據庫中都是空的。如果發生這種情況,並將其修復在db,中,則必須重新加載實體框架模型並再次嘗試您的代碼。您可能需要更改公共Int16? LocalAmount {get;組; }返回public Int16 LocalAmount {get;組; }。

從本質上說:Empno必須在任何地方都是非空值或者可以爲空。在數據庫和代碼中。

+0

或者使用.GetValueOrDefault()在Int16之間轉換?和Int16 – SkeetJon

+0

感謝您的啓發!現在我開始掌握這個概念了,我從發表的資料中發現很難。如果我有足夠的代表,我會投票。 :( –

相關問題