【发布时间】:2013-09-07 18:25:05
【问题描述】:
我有一个 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 field1。 m.xxx 有错误说 Cannot implicitly convert type 'long?'到“长”。存在显式转换(您是否缺少演员表?)。我可以知道有什么问题吗?
其他信息:
如果我在 m.xxx 前面投射 (long),错误将会消失,但是当这个查询没有返回值时会出现另一个问题,因为投射 long 是错误的 到 null
【问题讨论】:
-
正如错误所说:一个是
long,另一个是long?,即Nullable<long>。从你给出的代码中无法说出哪个是哪个。 -
你确定这两个都不可以为空吗?
-
实际上我认为我们可以肯定地说
m.xxx必须是long?并且vmTest.field1是long,因为如果它是相反的方式它会工作(long是隐式转换为long?)。 -
在我的 vmTest 类中没有任何字段可以为空
-
好吧,我的错,我对 MVC 甚至 C# 都太陌生,因此永远不知道有一个 long? 类型,它不同于 long
标签: c# linq asp.net-mvc-4 iqueryable