LINQ:无法将short转换为short?

时间:2014-03-07 06:15:48

标签: c# asp.net sql linq dbml

无法隐式转换类型'short?'在 LocalAmount = t.EmpNo 中“缩短”。我使用了Convert.ToInt16(t.EmpNo)但是'join'子句会出错,并且"incorrect", "type inference failed..."

    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();
        }
    }

2 个答案:

答案 0 :(得分:1)

您的错误消息指出t.EmpNo是 nullable Int 16.请参阅short后面的问号?

'short?' to 'short' - 其中说:我无法将Int16?转换为Int16问号定义,此值可以是null

因此,如果您更改模型,则无需解析任何内容,但需要使用t.EmpNo.Value

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

答案 1 :(得分:0)

EmpNo很可能永远不会为空,并且你的一个EmpNo在数据库中可以为空,而另一个则不可用。确保两者都不可为空。如果由于某种原因它们有时应该能够为Null,那么它们必须都可以在db中为空。如果发生了这种情况并且你在数据库中修复了它,你将不得不重新加载你的实体框架模型并再次尝试你的代码。您可能需要更改公共Int16? LocalAmount {get;组;返回公共Int16 LocalAmount {get;组; }。

基本上:Empno必须在任何地方都是不可为空的,或者在任何地方都可以为空。在数据库和代码中。