按日期列出下一个30天的列表,并在C#中的列表框中显示

时间:2013-06-24 12:33:26

标签: c# linq windows-phone-7 facebook-c#-sdk

我使用Graph Api

在Facebook生日列表上工作

通过这个Url Im获取我所有朋友的生日列表

https://graph.facebook.com/ {0}?fields = friends.fields(birthday,id,name)& access_token = {1}”,fbid,acctocken“

获得回应之后我的代码就像这样

        var response = e.Result;
        var jsonData = JsonConvert.DeserializeObject<RootObject>(response);
        jsonData.friends.data = jsonData.friends.data.OrderBy(BdayItems => BdayItems.birthday).ToList();

使用上面的Linq查询我按生日排序我的好友列表,我在列表框中显示所有好友生日。

但我需要更多像

我想从今天起仅显示30天生日

如何通过使用Linq查询或任何其他

轻松实现此目的

2 个答案:

答案 0 :(得分:1)

假设BdayItems.birthday的类型为string,您可以执行以下操作:

jsonData.friends.data = jsonData.friends.data.Where(BdayItems => BdayItems.birthday != null
                                                              && DateTime.Parse(BdayItems.birthday) >= DateTime.Today
                                                              && DateTime.Parse(BdayItems.birthday) <= DateTime.Today.AddDays(30))
                                             .OrderBy(BdayItems => DateTime.Parse(BdayItems.birthday))
                                             .ToList();

编辑:我今天愚蠢,没有考虑到。同样切换为假设BdayItems.birthday的类型为string,而不是DateTime。但是,如果DateTime.Parse()失败,您仍然必须捕获错误。

答案 1 :(得分:0)

覆盖所有案件以过滤掉生日,包括1月的12月案件

        static void Main(string[] args)
        {
            List<DateTime> birthdays = new List<DateTime>() {
            new DateTime(1977,1,29),
            new DateTime(1977,1,30),
            new DateTime(1977,1,31)
            };

            var daysFrom = 30;
            var start = new DateTime(DateTime.Now.Year,DateTime.Now.Month,DateTime.Now.Day);
            start = new DateTime(2020, 12, 31); // border test case
            var last = start.AddDays(daysFrom);
            var yearSwitch = last.Year - start.Year;
            var res = birthdays.Where(bday =>
                {
                    var bn = new DateTime(start.Year, bday.Month, bday.Day);
                    if (bday.DayOfYear < daysFrom)
                    {
                        bn = bn.AddYears(yearSwitch);
                    }
                    return bn >= start && bn <= last;
                }
            ).ToList();
            Console.WriteLine("List:{0}", string.Join(",", res));
        }