Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于具有C泛型的列的值检索最常见的元素_C#_Linq_Generics_Lambda_Expression - Fatal编程技术网

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

C# 基于具有C泛型的列的值检索最常见的元素,c#,linq,generics,lambda,expression,C#,Linq,Generics,Lambda,Expression,下面的代码从PetsAgeDataTable检索最常见的成熟度。我有这个代码工作,但我需要在另一列上做同样的把戏。因此,我需要将其设置为泛型,并传递lambda表达式,以便可以重用。我只是花了太多的时间想弄明白,问是否有人能让我知道如何。。。干杯/Jan Jensen var Petmaturity = from p in PetsAgeDataTable where p.Maturity != null //

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

是的,但分组中的成熟度列不是genric。如何做到这一点?在这里,它很可能是一个不同的column@Jan-请参阅更新,它现在应该可以编译了。:。您可能有数据问题!=null,您可以使用defaultT,或者将值作为参数。我的代码不使用c 4.0,正如yetwe在几个月后将出现一样:,我还有什么元组的替代方法?@Jan-您可以使用,并且自己编写一个简单的元组并不困难。另一个选项是返回T,并将计数作为输出参数。现在有2个问题。。。我的编译器抱怨let,您也可以发布示例以返回