【发布时间】:2016-04-08 14:28:10
【问题描述】:
如何将下面的 sql 更改为 linq。
select distinct * from dbo.TbleA a
left outer join dbo.TbleB b on a.schid = b.schid
left outer join dbo.TbleC c on b.addrid=c.addrid
and c.userid=a.userid
where b.addrid=1
这是导致错误的我的 linq 版本:
from a in db.TbleA
join b in db.TbleB on a.schid equals b.schid
join c in db.TbleC on new { w = b.addrid, z = a.userid } equals new { w=(int?)c.addrid, z=c.userid}
where (b.addrid == 1)
我在这里遇到错误:
在新的 { w = b.addrid, z = a.userid } 上加入 db.TbleC 中的 c 等于新 { w=(int?)c.addrid, z=c.userid}
我确实知道问题出在哪里,我要与我的联接中的两个表进行比较。 谢谢,错误是:
"join 子句中的表达式之一的类型不正确""调用 join 时类型推断失败"
b.addrid - int,
a.userid - string,
c.addrid - int?
c.userid - string
【问题讨论】:
-
请准确说出错误是什么——当我们看不到问题时,很难提供帮助。
-
您的 sql 查询不清楚:如果您在
TbleB上使用left join并在tbleB上使用Where子句,就好像您在进行内部连接一样。你想要左连接还是内连接?顺便说一句,为什么要强制转换为int?b.addrid 和 c.addrid 不是同一类型? -
@JonSkeet 它说连接类型不正确,我想我也提到了错误在哪里。如果您仔细查看我的 linq,我确实知道问题出在哪里。查看我的更新。
-
@RaphaëlAlthaus 我转换为接受在 linq 中正确的空值。那么 linq 中的内部连接又是什么?
-
对,所以在未来,正确的做法是在问题中包含 full 错误消息。我建议您将其与我询问的其他信息一起编辑...