Par Thierry Thoua,
jeudi, octobre 18 2007.
Lien permanent
LINQ
Comme expliqué dans un des mes précédents
post, il y a une nouvelle technologie qui sortira en .NET 3.5. Ainsi, je me suis décidé à réaliser un mini exemple en SQL Server pour un peu expliquer comment fonctionne la base des select en LINQ.
Tout développement "propre" en DLINQ repose sur une classe manager qui est détaillée ci-dessous. Cette classe offre tous les mécanismes classiques que l'on utilise en ado.net et sera la classe utilisée pour effectuer des changements ou appliquer ceux-ci a la base de données.
[csharp]
public partial class DBManager : DataContext
{
public Table<Blog> Blog;
public Table<Post> Post;
public DBManager(IDbConnection connection)
: base(connection)
{
}
}
Après cette classe "manager", il faut définir les classes "modèles" qui contiendront les informations récupérées de la DB,... On mappe chaque propriété/champ sur une colonne. On y définit également les relations. Celles-ci se reposent sur des nouvelles classes ajoutées en .net 3.5 à savoir EntityRef et EntitySet.
[csharp]
[Table(Name = "Blogs")]
public class Blog
{
[Column(IsPrimaryKey = true)]
public int BlogID;
[Column]
public string Title;
[Association(Storage = "m_posts", OtherKey = "PostID")]
public EntitySet<Post> Posts
{
get { return this.m_posts; }
set { this.m_posts.Assign(value); }
}
private EntitySet<Post> m_posts = new EntitySet<Post>();
}
[Table(Name = "Post")]
public class Post
{
[Column(IsPrimaryKey = true)]
public int PostID;
[Column]
public string Comment;
[Column]
public int BlogID;
[Association(Storage = "m_blog", ThisKey = "BlogID")]
public Blog Blog
{
get { return this.m_blog.Entity; }
set { this.m_blog.Entity = value; }
}
private EntityRef<Blog> m_blog;
}
Exemple de query:
[sql]
var d = from c in dataContext.Post select c;
var posts2 = from c in dataContext.Post where c.Comment.Contains("omment") orderby c.BlogID descending, c.PostID descending select c;
Par défaut, la valeur renvoyé d'un select est de type IEnumerable<T>. Il est possible de transformer le type de retour en y appliquant par exemple la méthode "ToList" ou "ToArray".
[csharp]
List<Post> posts2List = posts2.ToList<Post>();
Si vous voulez plus d'informations sur les différents select, etc. Je vous conseille ce
lien.