【发布时间】:2016-06-08 17:57:32
【问题描述】:
你能帮我理解这个错误信息吗?我肯定做错了什么,但是什么?
连接子句中的其中一个表达式的类型不正确。调用“加入”时类型推断失败。
Res.AddRange(from jh in db.Job
join jd in db.JobDetail on jh.number equals jd.number
join js in db.JobSection on new { jd.number, jd.ref, jd.product } equals new { js.number, js.ref, js.Product }
join oh in db.Order on jd.ref equals oh.ref
join bh in db.Buyer on jh.id equals bh.id
where jh.dateModify >= InputDate
select jh);
错误来自这一行
join js in db.JobSection on new { jd.number, jd.ref, jd.product } equals new { js.number, js.ref, js.Product }
【问题讨论】:
-
将其更改为 new { jd.number, jd.ref, Product = jd.product } 等于 new { js.number, js.ref, js.Product } - 属性名称应完全匹配匿名类型。
-
我有同样的错误:join js in db.JobSection on new { a=jd.number, b=jd.ref, c=jd.product } 等于 new { a=js .number, b=js.ref, c=js.Product }
-
然后检查这些列(数字、引用等)的 types 是否完全匹配。假设一个是可空的 int 而另一个只是 int (或短,无论如何) - 它不会工作。所有列类型和名称都应完全匹配。
-
@Evk 是的,没错。我的一种类型是左侧的 int 和 int?在右侧。我能做些什么?小技巧之类的?? 0 或 ToString() 不起作用。
-
只需将一个投射到另一个。如果例如 jd.number 是 int?并且 js.number 是 int,做:new {Number = jd.number ...} 等于 new {Number = (int?) js.number ...}。除了满足编译器之外,这不会产生负面影响。