0

我正在使用 Graph Api 处理 Facebook 生日列表

通过这个网址,我正在获取我所有朋友的生日列表

" 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 查询,我正在按生日对我的朋友列表进行排序,并在我的 ListBox 中显示我所有的朋友生日。

但我需要更多喜欢

我只想显示从今天起接下来 30 天的生日

如何通过使用 Linq Query 或任何其他方法以简单的方式做到这一点

4

2 回答 2

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.birthdayis of typestring而不是DateTime. DateTime.Parse()但是,如果失败,您仍然必须捕获错误。

于 2013-06-24T12:39:11.260 回答
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));
        }
于 2020-09-25T13:31:03.840 回答