从List获取项目并将其放入其他List C#中

时间:2015-04-10 09:05:12

标签: c# .net

我的问题是,如何从这个列表中取出

Periods = new List<TimePeriod>
                  {
                    new TimePeriod
                      {
                        Id = "Today",
                        Start = DateTime.Now.Date,
                        // date without seconds
                        End = DateTime.Now.Date.AddDays(1).AddTicks(-1) // last before next day
                      },

                    new TimePeriod
                      {
                        Id = "Yesterday",
                        Start = DateTime.Now.Date.AddDays(-1),
                        End = DateTime.Now.Date.AddTicks(-1),
                      },

                    new TimePeriod
                      {
                        Id = "CurrentWeek",
                        Start = DateTime.Now.FirstDayOfWeek(),
                        End = DateTime.Now.LastDayOfWeek().AddDays(1).AddTicks(-1)
                      },

                    new TimePeriod
                      {
                        Id = "LastWeek",
                        Start = DateTime.Now.AddDays(-7).FirstDayOfWeek(),
                        End = DateTime.Now.AddDays(-7).LastDayOfWeek().AddDays(1).AddTicks(-1)
                      },

只有Ids(今天,昨天,CurrentWeek,LastWeek)并将它们放在其他列表中,所以我可以在我的函数中对它们进行排序

public void FillDefaultPeriods(int offsetInMinutes,List<string> ordering)

带有订购参数(例如我将在以后添加参数&#34;昨天&#34;,&#34;今天&#34;,&#34; LastWeek&#34;,&#34; CurrentWeek&#34; )。订单将与期间清单

中的订单不同

2 个答案:

答案 0 :(得分:1)

嗯,目前尚不清楚你发布的FillDefaultPeriods与你宣布的目标相关的内容&#34;那些ID(&#34;今天&#34;,&#34;昨天&#34; ..在其他一些列表中)然后对它们进行排序&#34;,但这个目标很容易通过以下方式实现:

var list = Periods.Select(p => p.Id).ToList();
list.Sort();

更新

这将使用defult string comparer对列表进行排序。如果您需要一些自定义比较选项 - 您可以使用覆盖List.Sort方法将Comparison<T>作为参数并编写您自己的比较规则

像这样:

var list = Periods.Select(p => p.Id).ToList();
list.Sort(MyCustomComparison);

....

private static int MyCustomComparison(string x, string y)
{
   ... your comparing logic here.
}

MyCustomComparison方法中,您必须编写比较逻辑。如果x为&#34;较少&#34;此方法应返回负值。比你的y逻辑,如果它们是等于零,则为x&#34;更大&#34;比y

答案 1 :(得分:0)

如果您希望按特定顺序处理句点本身而不仅仅对其ID进行排序,则可以使用此方法:

var orderedPeriods = Periods.OrderBy(p => p.Id);

这将在id上使用默认字符串比较。当然,如果你想要更复杂的东西,你可以提供另一个关键的派生功能。