8,497
社区成员
发帖
与我相关
我的任务
分享
//车手类
public class Player
{
public Player(string name,int age,string country,string[] cars,int[] winYears)
{
Name = name;
Age = age;
Country = country;
Cars = cars;
WinYears = winYears;
}
public string Name{get;set;}
public int Age{get;set;}
public string Country{get;set;}
public string[] Cars{get;set;}
public int[] WinYears{get;set;}
}
//厂商与车名对应类
public class MadeFac
{
public MadeFac(string name,string car)
{
Name = name;
Car = car;
}
public string Name{get;set;}
public string Car{get;set;}
}
List<Player> lp = new List<Player>();
lp.Add(new Player("Zhang Si",22,"China",new string[]{"911","Benz"},new int[]{1978,1992,1993}));
lp.Add(new Player("Zhang Wu",26,"China",new string[]{"F1","Buick"},new int[]{1977,2004}));
............
List<MadeFac> mf = new List<MadeFac>();
mf.Add(new MadeFac("FC1","F1"));
mf.Add(new MadeFac("FC2","911"));
............
//下面是查询部份,也是要提问的部份
var query8 = lp.SelectMany(r=>r.Cars,(r,c)=>new {Player = r,Car = c}).
Join(mf,r1=>r1.Car,r2=>r2.Car,(r1,r2)=>new {Name = r1.Player.Name,Car = r1.Car,Fac = r2.Name}).
GroupBy(r=>r.Name);
foreach(var q in query8)
{
Console.WriteLine("车手:["+q.Key+"]");
foreach(var p in q)
Console.WriteLine(p.Car+":"+p.Fac);
Console.WriteLine();
}
GroupJoin
var query8 = lp.SelectMany(r=>r.Cars,(r,c)=>new {Player = r,Car = c}).
Join(mf.DefaultIfEmpty,r1=>r1.Car,r2=>r2.Car,(r1,r2)=>new {Name = r1.Player.Name,Car = r1.Car,Fac = r2.Name==null?"":r2.Name).
GroupBy(r=>r.Name);
var query8 = lp.SelectMany(r=>r.Cars,(r,c)=>new {Player = r,Car = c}).
Join(mf,r1=>r1.Car,r2=>r2.Car,(r1,r2)=>new {Name = r1.Player.Name,Car = r1.Car,Fac = r2.Name==null?"":r2.Name}).
GroupBy(r=>r.Name);