linq高手帮帮忙,关于linq多表左连接查询出错!在线等,急急急

baby520520 2012-06-20 05:51:03
如有A、B、C、D、E 五张表,他们的关系可以由以下的sql语句体现出来
sql中这几张表的左连接查询为:
select * from A
left join B on A.bid=B.id
left join C on B.cid=C.id
left join D on C.did=D.id
left join E on D.eid=E.id
where 1=1

现在改为linq实现以上的sql语句,大侠们帮忙啊,我这样写报错:

var query = from a in data.A
join b in data.B
on a.bid equals b.id into ab
from r1 in ab.DefaultIfEmpty()
join c in data.C
on r1.cid equals c.id into bc
from r2 in bc.DefaultIfEmpty()
join d in data.D
on r2.did equals d.id into cd
from r3 in cd.DefaultIfEmpty()
join e in data.E
on r3.eid equals e.id into ce
from r4 in ce.DefaultIfEmpty()
select new Signature
{
Id = a.Id,
Name = r1.Name,
Pro = r2.Pro,
IpAdd = r3.IpAdd
};
IList<Signature> list = query.Take(pageSize).Skip((page - 1) * pageSize).ToList();//在这句报错
return list;

具体的报错信息为:无法将类型为“Remotion.Linq.Clauses.JoinClause”的对象强制转换为类型“Remotion.linq.Clauses.FromClauseBase",引发了“System.InvalidCastException”类型的异常,
求大侠帮忙,急急急啊!!!
...全文
554 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yzf86211861 2012-06-21
  • 打赏
  • 举报
回复
以后 类似的 去linq板块 问 那儿专业
AI观星台 2012-06-21
  • 打赏
  • 举报
回复
Select里的cast发生的问题。既然是outer join,你要考虑到 r2.Pro 可能为 null 的时候。
象2楼那样就可以了

......
select new Signature
{
Id = a.Id,
Name = b==null?"":b.Name,
Pro = c==null?"":c.Pro,
IpAdd = d==null?"":d.IpAdd
};
baby520520 2012-06-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
从目前的代码看不出错误所在
[/Quote]
不好意思,终于会发图了,麻烦大侠看图:
baby520520 2012-06-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
从目前的代码看不出错误所在
[/Quote]
对不起啊,先说明一下,我是在NHiberate上用linq查询的,发张图给你看看,我发现不只是多张表有这样的错误,连普通的两张表左连接也报错说“未实现该方法或操作”,请注意图片的红色圈出来的部分,实体有值,但是下面就是报“未实现该方法或操作”,大侠看图,帮忙找找原因:
baby520520 2012-06-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
从目前的代码看不出错误所在
[/Quote]
怎么发图片,汗,不会发啊,想截几个图出来给你们看
q107770540 2012-06-21
  • 打赏
  • 举报
回复
从目前的代码看不出错误所在
baby520520 2012-06-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
C# code


var query = from a in data.A
join b in data.B
on a.bid equals b.id into ab
from b in ab.DefaultIfEmpty()
join c in data.C
……
[/Quote]
还是报错啊,说什么未实现该方法或操作,还是toList()那里报错,我调试看query结果视图里只写着"未实现该方法或操作。大侠,咋办
q107770540 2012-06-20
  • 打赏
  • 举报
回复

var query = from a in data.A
join b in data.B
on a.bid equals b.id into ab
from b in ab.DefaultIfEmpty()
join c in data.C
on b.cid equals c.id into bc
from c in bc.DefaultIfEmpty()
join d in data.D
on c.did equals d.id into cd
from d in cd.DefaultIfEmpty()
join e in data.E
on d.eid equals e.id into ce
from e in ce.DefaultIfEmpty()
select new Signature
{
Id = a.Id,
Name = b==null?"":b.Name,
Pro = c==null?"":c.Pro,
IpAdd = d==null?"":d.IpAdd
};

baby520520 2012-06-20
  • 打赏
  • 举报
回复
顶!大侠大侠,帮帮忙好不

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧