我有物品清单。
class Item{
public int Id { get; set; }
public DateTime CreatedDate { get; set; }
public string Name { get; set; }
}
获取季度清单以及2012年第一季度,2013年第二季度的年份
我需要根据季度列表过滤列表。 我只需要具有指定季度列表的项目名称列表。
答案 0 :(得分:2)
像Nikhil问的那样,我不确定你在寻找什么结果,但这里有一些建议。这些列表中的任何一个都能满足您的需求吗? itemsByQuarter将每个项目分组到基于季度的列表中。 secondQuarterItemNames只是Q2中项目名称的列表。希望这有助于您思考正确的道路。
class Item
{
public int Id { get; set; }
public DateTime CreatedDate { get; set; }
public string Name { get; set; }
}
class Program
{
static int QuarterFromMonth(int month)
{
return (month-1) / 3 + 1;
}
static void Main(string[] args)
{
Item[] items =
{
new Item {Id = 1, CreatedDate = new DateTime(2014, 4, 1), Name = "AprilItem"},
new Item {Id = 1, CreatedDate = new DateTime(2014, 7, 1), Name = "JulyItem"},
new Item {Id = 1, CreatedDate = new DateTime(2014, 10, 1), Name = "OctoberItem"},
};
var itemsByQuarter = items.GroupBy(i => QuarterFromMonth(i.CreatedDate.Month));
var secondQuarterItemNames = items.Where(i => QuarterFromMonth(i.CreatedDate.Month) == 2).Select(i => i.Name);
}
}
答案 1 :(得分:1)
您可以将该季度建模为结构:
public struct Quarter
{
public Quarter(int year, int quarterIndex)
{
Year = year;
QuarterIndex = quarterIndex;
}
public static Quarter FromDate(DateTime date)
{
return new Quarter(date.Year, 1 + (date.Month - 1)/3);
}
public int Year;
public int QuarterIndex;
}
然后,只需设置目标宿舍列表并使用LINQ进行过滤(代码假定您现有的项目集合称为items
):
var targetQuarters = new[]
{
new Quarter(2012, 1),
new Quarter(2013, 1)
};
var itemsInTargetQuarters =
items.Where(i => targetQuarters.Contains(Quarter.FromDate(i.CreatedDate)))
.ToList();