GQ08 X: encore des ensembles

En voici un un peu plus dur. J’ai un ensemble de villes ‘cities’ et une liste de groupes de villes. J’aimerai afficher l’ensemble du contenu de ‘cities’ mais en faisant apparaître les groupes à la place des villes si ceux-ci y sont présents. Les villes isolées apparaissent seules. var cities = new string[] { "Paris",…

9

[Réponse] GQ08 IX: petite optimisation Linq to object

Commençons par une réponse ‘fonctionnelle’. if (query.Count() == 0) { } nous recherchons ici à déterminer si query est une séquence non nulle, autrement dit, si query renvoie des éléments. Techniquement ‘.Count() == 0’ répond à la question mais est assez coûteux. En effet, .Count() parcourt l’ensemble de la séquence et dans notre cas le…

2

GQ08 IX: petite optimisation Linq to object

Allez, une rapide pour la fin de journée.Le truc est simple mais il est important de toujours l’avoir en tête lorsque l’on fait du Linq. La requête suivante est correcte mais peut-être optimisée. Comment ? if (query.Count() == 0) { //… } Dans le même genre: if ((from c in customers where c.City == "Paris"…

11

GQ08 VIII: initialisation de collections

Depuis .Net 3.5, C# (3.0 donc) propose une syntaxe facilitant l’initialisation de collections.On peut ainsi écrire: var list = new List<string> { "Paris", "Londres" }; Imaginons maintenant que l’on veuille initialiser une liste d’un type anonyme.Ex d’élément: ‘new { FirstName=”Guillaume”, LastName=”Renaud” }’ J’attends vos propositions.

7

GQ08 VII: Linq to Sql mapping

Linq to Sql utilise des informations de mapping pour générer les requêtes Sql.Comment récupérer ces informations de mapping pour notre propre usage ? Imaginons un scénario simple pour générer dynamiquement les colonnes d’une grille (en mettant des combos pour les relations par exemple). var db = new NorthwindDataContext(); var q = from c in db.Customers…

7

GQ08 VI: l'équivalent de 'in' avec Linq to Sql

Linq to Sql est capable de générer le ‘in’ Sql. Cela se traduit en Linq par l’usage de la méthode .Contains(). L’exemple ci-dessous compile mais pourtant plante à l’exécution. Pourquoi donc ? var db = new NorthwindDataContext(); var cq = CompiledQuery.Compile((NorthwindDataContext ctx, string[] cities) => from c in ctx.Customers where cities.Contains(c.City) select c); var list…

8

[Réponse] GQ08 V: révisons les ensembles

Réponse au quizz précédent. Ce quizz va me permettre de rappeler plusieurs points intéressants: – Jouer avec les chaînes de caractères est toujours un jeu dangereux d’un point de vue de la performance. N’oublions pas qu’en .Net une chaîne est une collection de caractères en lecture seule (immuable). Les syntaxes utilisant les surcharges d’opérateur (ex:…

4

GQ08 V: révisons les ensembles

Voici un cinquième quizz pour le week-end. Soupçonnant une semaine de 15 août un peu désertée je reprendrai plus activement les quizzs la semaine prochaine. Je vous propose ici de rechercher la liste distincte des caractères présents dans l’ensemble des chaînes de caractères. Puis dans une second temps, l’ensemble des caractères présents dans toutes les…

15

GQ08 IV: Linq to Sql bug ?

Un peu de Linq to Sql ! Le fonctionnel est simple, j’aimerais depuis toutes les catégories récupérer une liste d’éléments regroupant le nom de la catégorie ainsi qu’un dictionnaire des produits appartenants à cette catégorie. Ceci afin de pouvoir retrouver rapidement un produit appartenant à une catégorie. Le code suivant est syntaxiquement correct, il compile…

14

GQ08 III: mettons les choses à plat

Imaginons un tableau quelconque à deux dimensions. J’aimerais tout simplement lister l’ensemble des données sous forme d’un simple vecteur en éliminant la seconde dimension. var values = new int[][] { new int[] {1, 2, 3}, new int[] {4, 5, 6}, new int[] {7, 8, 9} }; var q = ? foreach (var i in q)…

3