C# 仅按开始日期对日期时间排序

C# 仅按开始日期对日期时间排序,c#,C#,我已经问了一个不同的问题,并得到了另一个用户的帮助来传递我的值。我使用的是如下所示的for循环,但这里肯定是错误的,因为代码一个接一个地带来值,而不是排序 public class Break { public DateTime MealStart { get; set; } public DateTime MealEnd { get; set; } } 我的主课 IList<DateTime> starts = new List<DateTime>()

我已经问了一个不同的问题,并得到了另一个用户的帮助来传递我的值。我使用的是如下所示的for循环,但这里肯定是错误的,因为代码一个接一个地带来值,而不是排序

public class Break
{
    public DateTime MealStart { get; set; }
    public DateTime MealEnd { get; set; }
}
我的主课

IList<DateTime> starts = new List<DateTime>();
IList<DateTime> ends = new List<DateTime>();
DateTime breakStart1 = new DateTime(2012, 02, 15, 12, 30, 00);  // 15/02/12 12.30PM
DateTime breakEnd1 = new DateTime(2012, 02, 15, 13, 30, 00);  // 15/02/12 01.30PM
DateTime breakStart2 = new DateTime(2012, 02, 15, 11, 00, 00);  // 15/02/12 11.00AM
DateTime breakEnd2 = new DateTime(2012, 02, 15, 12, 00, 00);  // 15/02/12 12.00PM
DateTime breakStart3 = new DateTime(2012, 02, 15, 12, 00, 00);  // 15/02/12 12.00PM
DateTime breakEnd3 = new DateTime(2012, 02, 15, 01, 00, 00);  // 15/02/12 01.00PM
starts.Add(breakStart1);
starts.Add(breakStart2);
starts.Add(breakStart3);
ends.Add(breakEnd1);
ends.Add(breakEnd2);
ends.Add(breakEnd3);
for (int i = 0; i < starts.Count; i++)
{
    var breaks = new List<Break>()
    {
        //for (int j= 0; j<starts.Count; j++)
        //{
        new Break()
        {
            MealStart = starts[i],
            MealEnd = ends[i]

        }
        // }
    };

    var ordered = breaks.OrderBy(s => s.MealStart);
    foreach (var ord in ordered)
    {
        System.Console.WriteLine(ord.MealStart);
        System.Console.WriteLine(ord.MealEnd);
    }
}

但这并不是因为for循环。

您正在创建
中断
在任何循环之后,您需要在循环之外这样做:

IList<DateTime> starts = new List<DateTime>();
IList<DateTime> ends = new List<DateTime>();
DateTime breakStart1 = new DateTime(2012, 02, 15, 12, 30, 00);  // 15/02/12 12.30PM
DateTime breakEnd1 = new DateTime(2012, 02, 15, 13, 30, 00);  // 15/02/12 01.30PM
DateTime breakStart2 = new DateTime(2012, 02, 15, 11, 00, 00);  // 15/02/12 11.00AM
DateTime breakEnd2 = new DateTime(2012, 02, 15, 12, 00, 00);  // 15/02/12 12.00PM
DateTime breakStart3 = new DateTime(2012, 02, 15, 12, 00, 00);  // 15/02/12 12.00PM
DateTime breakEnd3 = new DateTime(2012, 02, 15, 01, 00, 00);  // 15/02/12 01.00PM
starts.Add(breakStart1);
starts.Add(breakStart2);
starts.Add(breakStart3);
ends.Add(breakEnd1);
ends.Add(breakEnd2);
ends.Add(breakEnd3);
List<Break> breaks = new List<Break>();
for (int i = 0; i < starts.Count; i++)
{
    breaks.Add(new Break()
    {
        MealStart = starts[i],
        MealEnd = ends[i]
    });
}
var ordered = breaks.OrderBy(s => s.MealStart);
foreach (var ord in ordered)
{
    System.Console.WriteLine(ord.MealStart);
    System.Console.WriteLine(ord.MealEnd);
}
IList start=new List();
IList ends=新列表();
DateTime breakStart1=新的日期时间(2012、02、15、12、30、00);//2012年2月15日下午12:30
DateTime breakEnd1=新的日期时间(2012、02、15、13、30、00);//下午15/02/12 01:30
DateTime breakStart2=新的日期时间(2012,02,15,11,00,00);//2012年2月15日上午11:00
DateTime breakEnd2=新的日期时间(2012,02,15,12,00,00);//2012年2月15日下午12:00
DateTime breakStart3=新的日期时间(2012、02、15、12、00、00);//2012年2月15日下午12:00
DateTime breakEnd3=新的日期时间(2012,02,15,01,00,00);//下午15/02/12 01.00
开始。添加(breakStart1);
开始。添加(breakStart2);
开始。添加(breakStart3);
结束。添加(breakEnd1);
结束。添加(breakEnd2);
结束。添加(breakEnd3);
列表中断=新列表();
for(int i=0;is.MealStart);
foreach(已排序的变量ord)
{
系统控制台写入线(ord.MealStart);
系统控制台写入线(ord.MealEnd);
}

既然@Corylulu在基本问题上击败了我,这里有一个稍微短一点的不同方法:

IEnumerable<Break> breaks = 
    starts.Zip(ends, (s, e) => new Break { MealStart = s, MealEnd = e })
    .OrderBy(b => b.MealStart);

foreach (Break brk in breaks)
    Console.WriteLine("Start: {0}\tEnd: {1}", brk.BreakStart, brk.BreakEnd);
IEnumerable breaks=
Zip(结束,(s,e)=>newbreak{MealStart=s,MealEnd=e})
.OrderBy(b=>b.MealStart);
foreach(在中断中中断brk)
WriteLine(“Start:{0}\tEnd:{1}”,brk.BreakStart,brk.BreakEnd);

IEnumerable.Zip
方法获取一对
IEnumerable
s和一个转换函数,并生成一个输出
IEnumerable
,其中包含使用每个输入
IEnumerable
的成员调用转换函数的结果。你可以在课程结束时用
ToList()
将其转换为
列表。

我没有-1这是因为我认为这可能会产生连锁反应,最终导致你的声誉不佳。伙计,你到底想干什么?(准确地说!)@G.Y,我正试着做科里卢卢公布答案的事情,多亏了他all@Usher编辑后的问题不值得投反对票,他确实展示了代码示例并解释了他的问题(并修复了他之前发布的错误英语:P)。所以我会投你反对票,反对你的反对票。@Corylulu-这是非常令人沮丧的。一个被问到,一个被问到一个补充话题(这很好),现在这个被问到,重复第二个(不好)。我已经在第一个问题上将一个问题转换成另一个问题(不好)。可能重复@Usher No problem。请记住,这里要清楚明了,切中要害。以最简单、最独立的形式(最好是可测试的形式)提供您所能提供的所有代码。并始终记住选择最佳答案:P@Corylulu,我在5分钟前试图选择你的答案作为最佳答案,但这不允许我这么做,所以我必须等到现在才能选择:)
IEnumerable<Break> breaks = 
    starts.Zip(ends, (s, e) => new Break { MealStart = s, MealEnd = e })
    .OrderBy(b => b.MealStart);

foreach (Break brk in breaks)
    Console.WriteLine("Start: {0}\tEnd: {1}", brk.BreakStart, brk.BreakEnd);