0

我有一个 IQueryable 方法如下:

public IQueryable<vmTest> TestMethod(long ID)
{
    return from m in db.table1
           join n in db.table2
           on m.table1_ID equals n.table1_ID into tabC
           from c in tabC
           join o in db.table3
           on m.table3_ID equals o.table3_ID
           where m.table1_ID.Equals(ID)
           select new vmTest{ field1 = m.xxx };
}

从上面的代码中,m.xxx是一个 long 类型,在vmTest中有一个public long field1m.xxx有错误,说不能隐式转换类型“长?” 到“长”。存在显式转换(您是否缺少演员表?)。我可以知道有什么问题吗?

附加信息:
如果我在m.xxx前面转换(long),错误将会消失,但是当这个查询没有返回值时会出现另一个问题,因为将long转换为null是错误的

4

2 回答 2

2

如果您确定要使用的类型,您可以试试这个:

public IQueryable<vmTest> TestMethod(long ID)
{
    return from m in db.table1
           join n in db.table2
           on m.table1_ID equals n.table1_ID into tabC
           from c in tabC
           join o in db.table3
           on m.table3_ID equals o.table3_ID
           where m.table1_ID.Equals(ID)
           select new vmTest
               { 
                    field1 = m.xxx.HasValue 
                        ? m.xxx.Value
                        : default(long) /*or something else, or an exception maybe... according to your expectation in this case*/ };
}
于 2013-09-04T09:55:27.573 回答
2

你有几个解决方案:

  • 您可以更改 vmTest 类定义并将 field1 类型从 long 替换为 long 吗?
  • 您可以更改数据库中的表并将 xxx 从 NULL 转换为 NOT NULL 然后 xxx 将变为 long
  • 您可以在查询中使用条件,例如

    new vmTest { field1 = m.xxx.HasValue ? m.xxx.Value : 0 }
    

更多关于 Nullables的信息在这里

于 2013-09-04T09:56:23.397 回答