juin
2007
J’avais blogué précedemment sur le fait que les tables d’un DataSet n’étaient plus de simple DataTable mais des System.Data.TypedTableBase<DataRowType>. Quelque chose de très intéressant c’est que System.Data.TypedTableBase<DataRowType> implémente IEnumerable<DataRowType>. Du coup, on a le droit d’écrire ce style de requêtes : var column1Values = from row in ds.DataTable1 select row.DataColumn1;
juin
2007
Jomo Fisher a utilisé LINQ pour revoir l’implémentation du Design Pattern Visitor en utilisant LINQ.
juin
2007
J’avais récemment blogué sur le fait que Jomo Fisher avait réimplémenté le Design Pattern Visitor avec LINQ. Il remet ça ! Je trouve que c’est vraiment un très bon exemple d’utilisation de C#3.0.
juin
2007
La classe DataReader n’implémente pas l’interface IEnumerable. Du coup pas de requête LINQ. Je viens de trouver un post qui a fait ceci avec deux Extension Methods que je ne manquerai pas d’inclure dans mon projet codeplex : http://www.codeplex.com/ExtensionMethods.
juin
2007
Charlie Calvert vient de référencer toutes une série d’extension de LINQ plus plusieurs articles sur C#. Pour rappel, Microsoft fournit des « providers » LINQ pour les objets, SQL Server, les DataSet, les fichiers XML. Vous pouvez cependant relativement facilement créer votre propre provider. J’avais d’ailleurs déjà référencé l’excellent travail de Bart de Smet : LINQ To LDAP.
juin
2007
La syntaxe d’un join en LINQ est : from e1 in enumerable1 join e2 in enumerable2 on e1.X equal e2.X select new {e1.X, e1.Y, e1.A, e2.B} Je voulais faire un join sur e1.X equal e2.X et e1.Y equal e2.Y. Je pensais pouvoir utiliser un && comme dans un where mais ça ne marche pas. On ne peut mettre qu’une seule condition à un join. Anders Hejlsberg m’a donné la solution : passer par un anonymous […]
juin
2007
Avec Linq, une nouvelle interface est venu se greffer accompagnant INotifyPropertyChanged : INotifyPropertyChanging. Tout comme sa grande soeur (qui était là depuis .NET 2.0) elle ne comporte qu’un évènement : PropertyChanging. Bien souvent, les évènements en « ing » prennent des CancelEventArgs. Pas celui-là. Il a la même signature que PropertyChanged : public interface INotifyPropertyChanging { event PropertyChangedEventHandler PropertyChanging; }
juin
2007
System.Data.Linq.Table<> ne supporte pas l’extension method Last. Cependant, comme c’est un IEnumerable, l’erreur n’intervient qu’à l’exécution et non à la compilation. L’erreur est la suivante : « The query operator ‘Last’ is not supported. » Cependant on peut feinter : passer par l’extension method Last sur IEnumerable : ((IEnumerable<Person>)(dataContext.Persons)).Last(); ou dataContext.Persons.ToList().Last(); En faisant cela, on comprend pourquoi ce n’est pas supporté par System.Data.Linq.Table<>. En effet, le dernier élément n’est pas le dernier élément ajouté ! Pour info, […]
juin
2007
Imaginons une base SQL Server avec deux tables : une table Worker et une table Company. Quand vous ajoutez un fichier de type LINQ to SQL File à votre projet et que vous rajoutez dedans les deux tables, vous avez une classe qui hérite de System.Data.Linq.DataContext ainsi qu’une classe Worker et une classe Company. Votre classe qui hérite de System.Data.Linq.DataContext a deux propriétés : Workers et Companies. Comme vous pouvez le remarquer, ces noms sont […]