如何使用 LinQ 和 List<T> 正确设置函数参数?

How To correctly set Parameters for Function with LinQ and List<T>?

我正在为 IEnumerable<ISeries> 函数的参数苦苦挣扎。

我创建了一个 interface AllProperties,它结合了我在某些时候需要的来自不同 类 的所有属性。

这是我现在的IEnumerable<ISeries> GetDepartments

public IEnumerable<ISeries> GetDepartments()
        {
            IEnumerable<ISeries> series = Employees.GroupBy(x => x.Department).ToList().Select(x => new PieSeries<double>
            {
                Values = new List<double> { x.Count() },
                Name = x.Key,
            });

            return series;
        } 

它工作得很好,但我必须 copy/paste 每个列表的代码和 属性 我想避免这种情况。

我试图创建的函数的想法是,我引用了一个 List 和一个给定的 属性 和 return 一个 IEnumerable<ISeries>

这是我目前得到的:

        public IEnumerable<ISeries> GetEnumerableGroupBy<T,TKey>(List<T> list, Func<AllProperties, TKey> myGroupingProperty) 
        {

            IEnumerable<ISeries> series = list.GroupBy(myGroupingProperty).ToList().Select(x => new PieSeries<double>
            {
                Values = new List<double> { x.Count() },
                Name = x.ToString(),
            });

            return series;
        }

//Calling the function like this
GetEnumerableGroupBy(Employees, x => x.Department);

现在我收到错误,List<T> 不包含 GroupBy 的定义,我不知道如何解决这个问题。

如有任何帮助,我们将不胜感激。

你非常接近。您根本不需要 AllProperties 界面。相反,只需将函数参数设为通用 T 类型即可。

public IEnumerable<ISeries> GetEnumerableGroupBy<T, TKey>(List<T> list, Func<T, TKey> myGroupingProperty)
{
   ...
}

您的其余代码应该可以正常工作。