我有以下代码从PetsAgeDataTable中检索最常见的成熟度。我有这个代码工作,但我需要在另一列上做同样的技巧。因此,我需要使它成为通用的并传递一个lambda表达式,以便可以重用它。我只是花了太多时间试图弄清楚那里是否有人愿意让我知道如何...干杯/ Jan Jensen
var Petmaturity = from p in PetsAgeDataTable
where p.Maturity != null //
group p by new { p.Maturity, p.PetId } into gp
select new { Maturity = gp.Key.Maturity, Count = gp.Coeunt() };
var element= Petmaturity.OrderByDescending(s => s.Count).First()
答案 0 :(得分:1)
假设你的方法采用lambda:
Func<Pet, T> getData
尝试类似:
public Tuple<T, int> GetMostCommonProperty<T>(IEnumerable<Pet> pets,
Func<Pet, T> getData)
{
var petGroups = from p in pets
let data = getData(p)
where data != null
group p by new { Data = data, p.PetId } into gp
select new { Data = gp.Key.Data, Count = gp.Count() };
var element = petGroups.OrderByDescending(s => s.Count).First();
return Tuple.Create(element.Data, element.Count);
}
样品使用:
Tuple<string, int> mostCommonName = GetMostCommonProperty(PetsAgeDataTable,
pet => pet.Name);
请注意,您需要一个通用的返回类型(除非它总是int
)。你不能真正返回匿名类型,但你需要返回一些东西。在这里我选择了一个元组,但你有很多选择,具体取决于你打算如何使用它。