根据具有 C# 泛型的列的值检索最常见的元素

本文关键字:检索 常见 元素 泛型 | 更新日期: 2023-09-27 17:55:42

我有下面的代码,可以从PetsAgeDataTable中检索最常见的成熟度。我有这段代码在工作,但我需要在另一列上做同样的技巧。因此,我需要使它成为通用并传递一个 lambda 表达式,以便可以重用它。我只是花了太多时间试图弄清楚它,问是否有人愿意让我知道怎么做......干杯/扬·詹森

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()

根据具有 C# 泛型的列的值检索最常见的元素

假设你的方法采用 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 )。你不能真正返回匿名类型,但你需要返回一些东西。在这里,我选择了一个元组,但你有很多选择,这取决于你打算如何使用它。