lambda表达式中Join的问题

rockmmm 2010-05-26 10:46:17

//车手类
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();
}

请问上面的查询部份,上面的查询代码如何修改,让它车子在无对应厂商时,依然显示出来,并且厂商的对应名称为空。请用lambda表达式
...全文
824 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
坚果o 2021-06-17
  • 打赏
  • 举报
回复

GroupJoin

rockmmm 2010-06-09
  • 打赏
  • 举报
回复
自已顶一下
rockmmm 2010-06-09
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 q107770540 的回复:]
不要使用labda表达式
用查询语句
在查询语句中使用DefaultIfEmpty()
[/Quote]

是不是可以认为用lambda无法实现上述要求?
q107770540 2010-06-09
  • 打赏
  • 举报
回复
不要使用labda表达式
用查询语句
在查询语句中使用DefaultIfEmpty()
rockmmm 2010-06-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 q107770540 的回复:]
注意使用DefaultIfEmpty()来实现

C# code


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.……
[/Quote]
不好意思,我试了一下,老样子。兄弟你再想想。
q107770540 2010-06-09
  • 打赏
  • 举报
回复
注意使用DefaultIfEmpty()来实现


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);
rockmmm 2010-06-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 q107770540 的回复:]
C# code

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?"":……
[/Quote]

结果上跟原来代码中是一样的,对于没有生产厂家的汽车,同样也是不显示的。
希望能再改改。
q107770540 2010-06-08
  • 打赏
  • 举报
回复

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);
rockmmm 2010-05-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyq11 的回复:]
LINQ使用JOIN
var q =
from e in db.Employees
join o in db.Books on e.EmployeeID equals o.EmployeeID into b
from x in b.DefaultIfEmpty()
select new
{
e.ID,
e.Name,
……
[/Quote]

不要这种写法的,用lambda表达式,像文中那样,请多帮忙。
wuyq11 2010-05-26
  • 打赏
  • 举报
回复
LINQ使用JOIN
var q =
from e in db.Employees
join o in db.Books on e.EmployeeID equals o.EmployeeID into b
from x in b.DefaultIfEmpty()
select new
{
e.ID,
e.Name,
o.BookName
};

8,497

社区成员

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

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