【问题标题】:retrieve the most common element based on the value of a column with C# generics使用 C# 泛型根据列的值检索最常见的元素
【发布时间】:2011-05-10 11:03:05
【问题描述】:

下面的代码可以从 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()

【问题讨论】:

    标签: c# linq generics lambda expression


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

    【讨论】:

    • 是的,但分组中的成熟度列不是通用的。那怎么办?这里很可能是一个不同的列
    • @Jan - 查看更新,现在应该可以编译了。 :)。您可能对data != null 有疑问,您可以改用default(T),或者将值作为参数。
    • 我的代码还没有使用 c# 4.0(我们将在几个月后到达那里:)),我还有什么其他的元组替代品?
    • @Jan - 你可以使用KeyValuePair,自己写一个简单的元组并不难。另一种选择是返回T,并将计数作为out 参数。
    • 现在有2个问题...我的编译器抱怨让你也可以发布返回的示例
    猜你喜欢
    • 2018-09-27
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    • 1970-01-01
    • 2018-09-11
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多