C# 通过从iGroup的每组中选择一个项目来构建列表
假设我有一个电影列表,其中有一组开始时间C# 通过从iGroup的每组中选择一个项目来构建列表,c#,asp.net,C#,Asp.net,假设我有一个电影列表,其中有一组开始时间 public class Show { public string Name { get; set; } public DateTime Start { get; set; } } 电影1-8:00 电影1-10:00 电影1-12:00 电影2-9:00 电影2-11:30 电影2-15:00 电影3-12:00 电影3-13:00 我最终得到一个分组列表,其中电影的名称是关键。我想从每个小组中抽出一次时间创建一个列表 现
public class Show
{
public string Name { get; set; }
public DateTime Start { get; set; }
}
电影1-8:00
电影1-10:00
电影1-12:00
电影2-9:00
电影2-11:30
电影2-15:00
电影3-12:00
电影3-13:00
我最终得到一个分组列表,其中电影的名称是关键。我想从每个小组中抽出一次时间创建一个列表
现在,因为有3个项目和8次,我应该有18个不同的列表
8:00-9:00-12:00
8:00 - 9:00 - 13:00
10:00 - 9:00 - 12:00
等等
我试着在小组中循环
foreach (var movie in movies)
{
foreach (var time in movie)
{
// Start looping through other groups and movies
}
}
不管怎么说,这要么是一个糟糕的解决方案,要么是我没有做正确的事情,因为我最终得到了一个列表,我不得不开始在这些列表中循环,通过从每个列表中只取一个项目来构建更多的列表。。。太可怕了。常规的嵌套foreach不起作用,因为我的8:00电影1包含了电影2和3的所有实例,所以我不得不将列表分开,这就变得太混乱了
有没有更好的方法来解决这个问题的建议
总结:
一个更容易理解的方法是这样的,你想在一天内看3部电影。你知道你想看哪三部电影,你不知道你想在什么时候看
我需要一份列出所有选项的清单。你可以在这个时候看这部电影,这个时候看这部
e、 g
列表1-电影1-8:00,电影2-9:00,电影3-12:00
清单2-电影1-8:00,电影2-9:00,电影3-13:00
清单3-电影1-8:00,电影2-11:30,电影3-12:00
等等
列表的顺序并不重要。我认为,你让这个问题变得比你需要的更复杂。如果您从一个showtime列表开始,那么只需按顺序枚举即可
List<Show> startTimes = GetTimesFromDB();
var moviesGrouped = startTimes.GroupBy(x => x.Name);
foreach(var group in moviesGrouped)
{
// print times for each movie
}
那么你的最终目标是什么。。。每部电影的首次放映时间列表?听起来你在做一个更复杂的查询,而你却不需要这样做。你是如何决定从每个分组中抽出什么时间的?这是第一个吗?最早的?最新版本?@Adam,既然我需要所有可能的组合,那么哪一个被采用并不重要。它们都需要在某个时候被包括在内@Tejs,我们的目标是展示所有电影中所有可能的时间组合。现在还不完全清楚什么是输入,什么是期望的输出。@Magnus,我已经更新了我的问题。请参见底部附近。谢谢您的回答,但我无法更改域模型。你的解决方案并不能真正解释我如何将一部电影的所有放映与另一部电影的所有放映结合起来。请你详细说明一下好吗?谢谢,不过我已经说到这一点了。我已经有了一个分组,我试着列举它。在我问题的第二个代码示例以及下面的解释中,我遇到的问题是如何构建一个包含所有可能的日期时间组合的列表。您是对的,将域模型更改为您建议的方式将使枚举更容易,但这不是我遇到的问题。我的问题是建立日期时间列表。我的解释可能很差,如果有帮助的话,我在问题的底部添加了一个摘要。在这种情况下,您只需在分组后附加一个where即可。其中x=>someOtherListOfMovies.Anyy=>y.Name==x.Name.GroupByx=>x.Name
List<Sample> sample = new List<Sample>
{
new Sample { Id = 1, Time = DateTime.Now },
new Sample { Id = 1, Time = DateTime.Now.AddDays(1) },
new Sample { Id = 2, Time = DateTime.Now.AddDays(2) },
new Sample { Id = 2, Time = DateTime.Now.AddDays(3) },
new Sample { Id = 3, Time = DateTime.Now.AddDays(4) },
};
foreach (var group in sample.GroupBy(x => x.Id))
{
foreach (var element in group)
{
Console.WriteLine(element.Id);
Console.WriteLine(element.Time);
}
}
public class Movie
{
public int MovieId { get; set; }
public string Name { get; set; }
public List<Showing> Showings { get; set; }
}
public class Showing
{
public DateTime StartTime { get; set; }
public List<Seat> UnsoldSeats { get; set; }
// Etc
}
foreach(var movie in movies)
{
foreach(var showing in movie.Showings)
// DoStuff
}