linq to sql多表级联查询

fengxuemofa6 2011-12-12 01:23:05
有个表A,表B,表C。A里面是sid,pid,username.B里面是sname,c里面是pname。要求级联查询出sname,pname新手刚接触linq求指导。
...全文
330 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Icedmilk 2011-12-12
  • 打赏
  • 举报
回复
那就对B连两次

results = a.Join(
b,
xa => xa.sid,
xb => xb.vid,
(xa, xb) => new { username = xa.username, sname = xb.name, pid = xa.pid }
).Join(
b,
xa => xa.pid,
xb => xb.vid,
(xa, xb) => new { username = xa.username, sname = xa.sname, pname = xb.name}
);

[Quote=引用 8 楼 fengxuemofa6 的回复:]
谢谢上面各位回答,还有个问题如果我表是这样表A,sid,pid,表B vid, name。然后根据级联查询出name怎么办?sid和pid都跟表B是级联得、
[/Quote]
fengxuemofa6 2011-12-12
  • 打赏
  • 举报
回复
谢谢上面各位回答,还有个问题如果我表是这样表A,sid,pid,表B vid, name。然后根据级联查询出name怎么办?sid和pid都跟表B是级联得、
q107770540 2011-12-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 andyalex 的回复:]
C# code

var linq=from a in A
from b in B
from c in C
where a.sid=b.id and a.pid=c.id
select new{
b.sname,
c.pname
}
[/Quote]

注意LINQ语法里没有 =
只有== 和equals

特别是join ,应该用equals

[Quote=引用 5 楼 ssp2009 的回复:]
C# code
var linq=from a in A join b in B on a.sid=b.id
join c in C on a.pid=c.id
select new{
b.sname,
c.pname
}
[/Quote]
Icedmilk 2011-12-12
  • 打赏
  • 举报
回复

public class _2011_12_12_01 : TestUnit
{
public override void Run()
{
var a = new List<A>();
var b = new List<B>();
var c = new List<C>();

a.Add(new A { sid = 1, pid = 1, username = "u1" });
a.Add(new A { sid = 2, pid = 2, username = "u2" });
a.Add(new A { sid = 3, pid = 3, username = "u3" });

b.Add(new B { sid = 1, sname = "s1" });
b.Add(new B { sid = 2, sname = "s2" });
b.Add(new B { sid = 3, sname = "s3" });

c.Add(new C { pid = 1, pname = "p1" });
c.Add(new C { pid = 2, pname = "p2" });
c.Add(new C { pid = 3, pname = "p3" });

var results = a.Join(
b,
xa => xa.sid,
xb => xb.sid,
(xa, xb) => new { username = xa.username, sname = xb.sname, pid = xa.pid }
).Join(
c,
xa => xa.pid,
xc => xc.pid,
(xa, xc) => new { username = xa.username, sname = xa.sname, pname = xc.pname });
foreach (var item in results) {
Console.WriteLine("{0,10}{1,10}{2,10}", item.username, item.sname, item.pname);
}
}
}

class A
{
public int sid { get; set; }
public int pid { get; set; }
public string username { get; set; }
}

class B
{
public int sid { get; set; }
public string sname { get; set; }
}

class C
{
public int pid { get; set; }
public string pname { get; set; }
}
快溜 2011-12-12
  • 打赏
  • 举报
回复
var linq=from a in A join b in B on a.sid=b.id
join c in C on a.pid=c.id
select new{
b.sname,
c.pname
}

fengxuemofa6 2011-12-12
  • 打赏
  • 举报
回复
如果用join怎么写?
快溜 2011-12-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fengxuemofa6 的回复:]
引用 1 楼 andyalex 的回复:

C# code

var linq=from a in A
from b in B
from c in C
where a.sid=b.id and a.pid=c.id
select new{
b.sname,
c.pname
}


那个大写的A,B,C是一个临时变量还是??
[/Quote]表名
fengxuemofa6 2011-12-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 andyalex 的回复:]

C# code

var linq=from a in A
from b in B
from c in C
where a.sid=b.id and a.pid=c.id
select new{
b.sname,
c.pname
}
[/Quote]

那个大写的A,B,C是一个临时变量还是??
andyalex 2011-12-12
  • 打赏
  • 举报
回复

var linq=from a in A
from b in B
from c in C
where a.sid=b.id and a.pid=c.id
select new{
b.sname,
c.pname
}

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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