1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| void Main()
{
var list = new List<Personne>
{
new Personne{ Nom = "Lajoie", Prenom = "Toto", Age = 10 },
new Personne{ Nom = "Lajoie", Prenom = "Bobby", Age = 20 },
};
CountByKey(list, p=>p.Nom).Dump();
CountByKey(list, p=>p.Prenom).Dump();
CountByKey(list, p=>p.Age).Dump();
CountByKey<Personne,int>(list, "Age").Dump();
CountByKey<Personne,String>(list, "Prenom").Dump();
}
Dictionary<TProp,int> CountByKey<TObj,TProp>(List<TObj> objects, Func<TObj,TProp> selector)
{
return objects.GroupBy(o => selector(o)).ToDictionary (o => o.Key,o=>o.Count());
}
Dictionary<TProp,int> CountByKey<TObj,TProp>(List<TObj> objects, string property)
{
var parameter = Expression.Parameter(typeof(TObj),"o");
var func = Expression.Lambda<Func<TObj,TProp>>(Expression.Property(parameter, property),parameter).Compile();
return CountByKey(objects, func);
} |
Partager