Опрос различных событий из Календаря Google - PullRequest
4 голосов
/ 12 декабря 2010

Прямо сейчас у меня есть очень простой запрос, который извлекает записи со строкой и определенным диапазоном дат.

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

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

   EventFeed myResultsFeed = _service.Query(eQuery);

После запроса myResultsFeed будет содержать atomEntryCollection.Каждый atomEntry имеет заголовок.То, как я это настроил, может быть несколько записей с одинаковым названием.

Я бы хотел, чтобы мой запрос мог выбирать уникальные заголовки.Возможно ли это?

Ссылка на документы API

Я предположил, что мог бы использовать объект 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 ]

3 голосов
/ 22 декабря 2010

Я не думаю, что вы пытаетесь сделать это с помощью API данных Google. Однако, опираясь на ответ @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());
0 голосов
/ 22 декабря 2010

Возможно, это не то решение, которое вы искали, но, поскольку у вас в руках есть 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.Я думаю, вы могли бы связать их вместе в словаре.Не оптимально, но должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...