using System.Linq.Dynamic;
using System.Collections;
using System.Collections.Generic;
public DateTime Naissance{get;set;}
public string Nom{get;set;}
public string Prenom{get;set;}
public string NomComplet{get{
return string.Format("{0} {1}",Nom,Prenom);
public Personne(int id, string nom, string prenom, int annee,int mois, int jour){
Naissance = new DateTime(annee,mois,jour);
public override string ToString(){
public static void Main()
var data = new List<Personne>(){
new Personne(0,"Truc","Machine",1980,1,1),
new Personne(1,"Azerty","Qsdfgh",1990,11,30),
new Personne(2,"Azerty","Machin",1970,6,21),
new Personne(3,"Truc","Poiuy",1960,6,21),
new Personne(4,"Foo","Test",1950,6,21),
new Personne(5,"Wxcv","Machin",1940,6,21)
.Where("Nom.StartsWith(@0) and (Prenom.Contains(@1) or Naissance.Year==@2)","Tr","a",1960)
.OrderBy("Nom asc,Prenom desc")
.Select("Id.ToString()+NomComplet")
.Cast<string>().ToList().ForEach(p=>Console.WriteLine(p));
.Where("Naissance>=@0 and Naissance<=@1",new DateTime(1965,1,1),new DateTime(1985,1,1))
.OrderBy("Naissance desc,Nom asc,Prenom asc")
.Select("NomComplet+Naissance.ToString()")
.Cast<string>().ToList().ForEach(p=>Console.WriteLine(p));