问个复杂点的linq写法

我2我骄傲 2017-02-15 08:24:40
public class Room
{
public guid id {get;set;}
public string name {get;set;}
}

public class Course
{
public guid id {get;set;}
public List<Room> roomList {get;set;}
}

现在有一个Course的集合, List<Course> ,要得到一个集合 List<Room> 并且去重复。

文字上可以描述为:1门课可以在N个教室上课,求N门课可以在哪些教室上课。(到的结果教室不重复)

只用LINQ,要怎么写。
...全文
152 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
我2我骄傲 2017-02-16
  • 打赏
  • 举报
回复
引用 11 楼 shingoscar 的回复:
如果roomList里的room是自己new出来的,room还必须实现比较器:
public class  Room : IEquatable<Room>
{
public guid id {get;set;}
public string name {get;set;}

public bool Equals(Room other){ return this.id == other.id; }
}
非常谢谢,结贴!
Poopaye 2017-02-16
  • 打赏
  • 举报
回复
如果roomList里的room是自己new出来的,room还必须实现比较器:
public class  Room : IEquatable<Room>
{
public guid id {get;set;}
public string name {get;set;}

public bool Equals(Room other){ return this.id == other.id; }
}
Poopaye 2017-02-16
  • 打赏
  • 举报
回复
那更简单:
(from room in
    (from course in courses
     select course.roomList)
     .SelectMany(l => l)
select room)
.Distinct() .ToList();
我2我骄傲 2017-02-16
  • 打赏
  • 举报
回复
引用 8 楼 shingoscar 的回复:
符合要求的教室应该在每门课的roomList中都出现一次 那么group之后出现次数和课目数就应该相等
可能是我表述的有问题。。 比如couse1 里的 List<Room> lr1 = new List<Room>{ new Room {id=123}, new Room {id=234} } course2 List<Room> lr2 = new List<Room>{ new Room {id=123}, new Room {id=345} } 现在想要得到结果是 List<Room> 的数为,123,234,345 的集合
Poopaye 2017-02-16
  • 打赏
  • 举报
回复
符合要求的教室应该在每门课的roomList中都出现一次 那么group之后出现次数和课目数就应该相等
Poopaye 2017-02-16
  • 打赏
  • 举报
回复
我不都注释了吗?
我2我骄傲 2017-02-16
  • 打赏
  • 举报
回复
引用 4 楼 shingoscar 的回复:
(from room in
	(from course in courses
	 select course.roomList)
	 .SelectMany(l => l)
group room by room.id into roomg
where roomg.Count() == courses.Count //房间重复次数应该和科目数一样
select roomg.First())
.ToList();
如果一上来的roomList就有重复的,那应该算是给的数据有问题,这里不考虑
可以,但是有一处地方不是很明白 就是 .count()==.count() 这个是嘛意思,谢谢。
我2我骄傲 2017-02-16
  • 打赏
  • 举报
回复
引用 4 楼 shingoscar 的回复:
(from room in
	(from course in courses
	 select course.roomList)
	 .SelectMany(l => l)
group room by room.id into roomg
where roomg.Count() == courses.Count //房间重复次数应该和科目数一样
select roomg.First())
.ToList();
如果一上来的roomList就有重复的,那应该算是给的数据有问题,这里不考虑
你指的是每个Course里的RoomList重复么?? 那不会有。 谢谢。我试下你的方法。
Poopaye 2017-02-15
  • 打赏
  • 举报
回复
(from room in
	(from course in courses
	 select course.roomList)
	 .SelectMany(l => l)
group room by room.id into roomg
where roomg.Count() == courses.Count //房间重复次数应该和科目数一样
select roomg.First())
.ToList();
如果一上来的roomList就有重复的,那应该算是给的数据有问题,这里不考虑
我2我骄傲 2017-02-15
  • 打赏
  • 举报
回复
别沉下去。1
我2我骄傲 2017-02-15
  • 打赏
  • 举报
回复
别沉下去。1
我2我骄傲 2017-02-15
  • 打赏
  • 举报
回复
沙发自己坐。

62,025

社区成员

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

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

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

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