连表查询
使用join可以将两个数据源按照特定的条件连接到一起
内连接
查询一个年份列表,查询当前年份的赛车手冠军和车队冠军
//得到所有冠军赛车手
IList<Racer> champions_racers = Formula1.GetChampions();
//得到冠军车队
IList<Team> champions_team = Formula1.GetContructorChampions();
var query = from r in champions_racers
from c in r.Years
select new {
year=c,
name=r.FirstName+" "+r.LastName
};
var query1 = from r in champions_team
from c in r.Years
select new
{
year = c,
name = r.Name
};
var query2 = (from r in query
join t in query1 on r.year equals t.year
orderby r.year
select new { r.year,rname=r.name,tname=t.name }).Take(10);
foreach (var item in query2)
{
Console.WriteLine("year={0},rname={1},tname={2}", item.year,item.rname,item.tname);
}
左连接
如赛车手比车队设立冠军的年份要早,可能某个年份只有赛车手冠军没有车队冠军,这时候需要左连接查询。