2010-12-12 24 views
4

En ce moment, j'ai une requête très simple qui récupère les entrées qui ont une chaîne et une plage de dates spécifiques.Interrogation d'événements distincts à partir de Google Agenda

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

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

    EventFeed myResultsFeed = _service.Query(eQuery); 

Après l'interrogation, myResultsFeed contiendra un atomEntryCollection. Chaque atomeEntry a un titre. La façon dont je l'ai mis en place, il pourrait y avoir plusieurs entrées avec le même titre.

Je voudrais que ma requête puisse sélectionner des titres UNIQUES. Est-ce possible?

Link to the API Docs

J'émis l'hypothèse que je pouvais utiliser un objet OU

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

mais il ne peut pas être passé à _service.Query()

J'explore aussi les .extraparameters objet. est-il possible de faire quelque chose comme ça?

eQuery.ExtraParameters = "distinct"; 

En regardant dans la fonction "réponse partielle" ..

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

il semble assez prometteur ..

+0

Une suggestion: avez-vous essayé de poser des questions sur les forums de l'API Google Apps? Vous pourriez obtenir une réponse définitive là-bas: http://www.google.com/support/forum/p/apps-apis?hl=fr. – Fueled

Répondre

0

Il est sans doute pas la solution que vous cherchez, mais puisque vous avez dans la main un AtomEntryCollection (qui met en œuvre la ligne IEnumerable<T>), vous pouvez utiliser LINQ pour récupérer les titres distincts, comme ça:

EventFeed feed = service.Query(query); 

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

Et puis boucle sur eux avec un simple foreach:

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

Mais vous avez seulement une collection de string représentant les titres de l'événement, et non une collection de AtomEntry. Je suppose que vous pourriez les relier ensemble dans un dictionnaire. Pas optimal, mais devrait fonctionner.

+0

hélas, dans mon cas, j'ai beaucoup de CalendarEntries. Je ne voulais pas avoir à tout démonter. – KevinDeus

3

Je ne pense pas que ce que vous essayez de faire soit possible en utilisant l'API Google Data. Cependant, en fonction de la réponse de @Fueled, vous pouvez faire quelque chose comme ceci si vous avez besoin d'une collection de 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

Ouais, j'ai beaucoup de données à trier. Il semble que la partie "Je ne pense pas" de votre réponse soit la plus proche. – KevinDeus