2010-12-12 11 views
4

Im Moment habe ich eine sehr einfache Abfrage, die Einträge mit einer Zeichenfolge und einem bestimmten Datumsbereich abruft.Abfrage bestimmter Ereignisse von Google Kalender

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

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

    EventFeed myResultsFeed = _service.Query(eQuery); 

Nach der Abfrage enthält myResultsFeed eine atomEntryCollection. Jeder atomEntry hat einen Titel. So wie ich es eingerichtet habe, könnte es mehrere Einträge mit demselben Titel geben.

Ich möchte, dass meine Abfrage UNIQUE Titel auswählen kann. Ist das möglich?

Link to the API Docs

ich die Hypothese aufgestellt, dass ich eine WHERE-Objekt verwenden könnte

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

aber es kann nicht zu _service.Query()

Ich erforsche auch die .extraparameters weitergegeben Objekt. Ist es möglich, so etwas zu tun?

eQuery.ExtraParameters = "distinct"; 

Ein Blick in die "Partial Response" -Funktion ..

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

es sieht ziemlich vielversprechend ..

+0

Ein Vorschlag: Haben Sie versucht, in den Google Apps API-Foren nachzufragen? Sie erhalten dort möglicherweise eine definitive Antwort: http://www.google.com/support/forum/p/apps-apis?hl=en. – Fueled

Antwort

0

Es ist wahrscheinlich nicht die Lösung, die Sie suchen, aber da Sie haben in der Hand ein AtomEntryCollection (die auf der ganzen Linie implementiert IEnumerable<T>), könnten Sie LINQ verwenden, um die verschiedenen Titel abzurufen, wie folgt:

EventFeed feed = service.Query(query); 

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

Und dann Schleife über sie mit einer einfachen foreach:

foreach (var item in uniqueEntries) 
{ 
    Console.WriteLine(item); 
} 

Aber dann haben Sie nur eine Sammlung von string den Event-Titel darstellt, und nicht eine Sammlung von AtomEntry. Ich nehme an, Sie könnten sie in einem Dictionary miteinander verbinden. Nicht optimal, sollte aber funktionieren.

+0

leider, in meinem Fall habe ich eine Menge von CalendarEntries. Ich wollte sie nicht alle runterziehen müssen. – KevinDeus

3

Ich denke nicht, was Sie versuchen, ist mit der Google Data API möglich. Wenn Sie jedoch @Fueled beantworten, können Sie so etwas tun, wenn Sie eine Sammlung von AtomEntrys benötigen.

// 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

Ja, ich habe eine Menge Daten zu sortieren. Es sieht so aus, als ob der "Ich glaube nicht" Teil Ihrer Antwort der nächste ist, den wir bekommen werden .. – KevinDeus

Verwandte Themen