我使用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查询或任何其他
轻松实现此目的答案 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));
}