我下面的代码可从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()
最佳答案
假设您的方法需要一个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
)。您不能真正返回匿名类型,但是您需要返回一些内容。在这里,我选择了一个元组,但是您有很多选择,具体取决于您打算如何使用它。