我有一个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 是一个长类型,在 vmTest 中有一个 public long field1 。 m.xxx 有错误说无法隐式转换类型'long?' 'long'。存在明确的转换(你是否错过演员表?)。我可能知道什么是错的吗?
其他信息:
如果我在 m.xxx 前面强加(长),则错误将消失,但当此查询未返回任何值时会出现另一个问题,因为强制转换长到 null
答案 0 :(得分: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*/ };
}
答案 1 :(得分:2)
您有几种解决方案:
您可以在查询中使用条件,例如
new vmTest { field1 = m.xxx.HasValue ? m.xxx.Value : 0 }
有关Nullables here
的更多信息