我正在做两个列表之间的同步。
IList<Event> GoogleEvents
和 Table<myEvent> DB.Events;
在谷歌方面,我正在使用 this
String Summary,
String Description,
EventDateTime Start,
EventDateTime End,
Event.RemindersData Reminders;
像这样在数据库端
我的代码是这样的
foreach (myEvent item in DB.Events)
{
if (item.GoogleID == "" || item.GoogleID == null)// i add event my db
{
//Add dbEvent to google and save id to googleid column
}
}
foreach (Event item in myGoogleCalendar.Items)
{
if (DB.Events.Where(o => o.GoogleID == item.Id).Count() == 0)// i add event google
{
//Add googleEvent to dbEvent
}
else
{
//This event also existing in two server
myEvent dbEvent = DB.Olaylar.Where(o => o.GoogleID == item.Id).First();
if(item.Updated.Value == dbEvent.UpdateTime) continue;//Same
if (item.Updated.Value > dbEvent.UpdateTime)
{
//Google event is new
}
else
{
//dbEvent is new
}
}
}
有个大问题:我忘了删除
我应该在哪里添加删除事件部分以及如何添加?
最佳答案
问题不在于实现删除同步,而在于识别事件是否已在一个列表中删除或添加到另一个列表。
我建议不要从 DB.Events 列表中删除事件,而是将它们标记为已删除。
因此,你需要一个标志
bool IsDeleted = false;
在您的类型 myEvent
中。
在谷歌列表中(我假设你使用 https://developers.google.com/google-apps/calendar/v3/reference/events )你没有这样的标志。所以你的算法需要有点棘手。
所以需要先从Google列表同步
foreach (Event item in myGoogleCalendar.Items)
{
if (DB.Events.Where(o => o.GoogleID == item.Id).Count() == 0)
{
// create new DB event from Google event, because since it is
// not in the DB.Events list, it has not been deleted there earlier,
// else there would be an event with IsDeleted=true
}
else
{
//This event exists in both
myEvent dbEvent = DB.Events.Where(o => o.GoogleID == item.Id).First();
if (dbEvent.IsDeleted)
{
// delete Google event, since the flag in DB.Events list shows that
// it existed earlier and has been deleted in DB.Events list.
}
else
{
if(item.Updated.Value == dbEvent.UpdateTime) continue;//Same
if (item.Updated.Value > dbEvent.UpdateTime)
{
// update DB event
}
else
{
// update Google event
}
}
}
}
然后从您的 DB.Events 列表同步
foreach (myEvent item in DB.Events)
{
if (!item.IsDeleted && string.IsNullOrEmpty(item.GoogleID))
{
// Create new Google Event from DB event
}
else if (!item.IsDeleted && !string.IsNullOrEmpty(item.GoogleID))
{
// Mark DB event as deleted
item.IsDeleted = true;
}
}
这在场景中有效
- 您在数据库中创建一个事件
- 您在 Google 中创建了一个事件
- 您在数据库中删除了一个事件
- 您在 Google 中删除了一个事件
关于c# - 两个列表同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24671814/