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

09-11 20:32