从Google日历查询不同的事件

时间:2010-12-12 08:46:13

标签: c# google-calendar-api

现在我有一个非常简单的查询,它会提取具有字符串和特定日期范围的条目。

   EventQuery eQuery = new EventQuery(calendarInfo.Uri.ToString());

   eQuery.Query = "Tennis";
   eQuery.StartDate = startDate;
   eQuery.EndDate = endDate;

   EventFeed myResultsFeed = _service.Query(eQuery);

查询后,myResultsFeed将包含一个atomEntryCollection。每个atomEntry都有一个Title。我设置它的方式,可能有多个具有相同标题的条目。

我希望我的Query能够选择独特的标题。这可能吗?

Link to the API Docs

我假设我可以使用WHERE对象

Where x = new Where();
x.yadayada();

但它无法传递给_service.Query()

我也在探索.extraparameters对象。可以这样做吗?

eQuery.ExtraParameters = "distinct";

调查“部分回应”功能..

http://code.google.com/apis/gdata/docs/2.0/reference.html#PartialResponse

看起来非常有希望..

2 个答案:

答案 0 :(得分:3)

我不认为您尝试使用Google Data API做什么。 但是,根据@Fueled的答案,如果你需要一个AtomEntry的集合,你可以做这样的事情。

// Custom comparer for the AtomEntry class
class AtomEntryComparer : IEqualityComparer<AtomEntry>
{
    // EventEntry are equal if their titles are equal.
    public bool Equals(AtomEntry x, AtomEntry y)
    {
        // adjust as needed
        return x.Title.Text.Equals(y.Title.Text);
    }

    public int GetHashCode(AtomEntry entry)
    {
        // adjust as needed
        return entry.Title.Text.GetHashCode();
    }
}

EventFeed eventFeed = service.Query(query)

var entries = eventFeed.Entries.Distinct(new AtomEntryComparer());

答案 1 :(得分:0)

这可能不是您正在寻找的解决方案,但由于您手头有AtomEntryCollection(在线下实现IEnumerable<T>),您可以使用LINQ来检索不同的标题,就像这样:

EventFeed feed = service.Query(query);

var uniqueEntries =
    (from e in feed.Entries
    select e.Title.Text).Distinct();

然后使用简单的foreach

循环遍历它们
foreach (var item in uniqueEntries)
{
    Console.WriteLine(item);
}

但是,您只有string代表事件标题的集合,而不是AtomEntry的集合。我想你可以在字典中将它们链接在一起。 不是最佳的,但应该有效。