【发布时间】:2016-05-22 07:15:37
【问题描述】:
我有这样的课
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public string Gender { get; set; }
public GRADE Grade { get; set; }
public string Nationality { get; set; }
}
public enum GRADE
{
A = 0,
B = 1,
C = 2,
D = 3,
E = 4
}
var list = new List<Student>();
list.Add(new Student() { Id = 1, Name = "Prasad", Gender = "M", Nationality = "India", Grade = GRADE.A });
list.Add(new Student() { Id = 2, Name = "Raja", Gender = "M", Nationality = "India", Grade = GRADE.B });
list.Add(new Student() { Id = 3, Name = "Hindu", Gender = "F", Nationality = "India", Grade = GRADE.A });
list.Add(new Student() { Id = 4, Name = "Hamed", Gender = "M", Nationality = "India", Grade = GRADE.C });
list.Add(new Student() { Id = 5, Name = "Priya", Gender = "F", Nationality = "India", Grade = GRADE.D });
list.Add(new Student() { Id = 6, Name = "Meera", Gender = "F", Nationality = "India", Grade = GRADE.B });
我得到了这样的解决方案,对于每个表达式我想写一堆代码.. Sum、Avg、Count 等
Linq 表达式
//count
var c = (from x in list.GroupBy(k => k.Gender)
select new
{
category = x.Key,
Value = x.Count()
}).ToList();
//sum
var s = (from x in list.GroupBy(k => k.Gender)
select new
{
category = x.Key,
Value = x.Sum(k => (int)k.Grade)
}).ToList();
//avg
var a = (from x in list.GroupBy(k => k.Gender)
select new
{
category = x.Key,
Value = x.Average(k => (int)k.Grade)
}).ToList();
我正在尝试基于聚合函数创建一个函数;它应该返回值,我试过找不到。
【问题讨论】:
-
如何将每个linq表达式放在一个方法中,然后用switch语句创建一个新方法,该方法将根据methods参数调用?
-
我已经尝试在表达式中使用 switch 语句,这没有帮助..
-
我不清楚你想要实现什么 - 你是什么意思“一个功能”?如果问题只是实现,您至少可以发布您期望如何使用此功能吗?
-
查看聚合表达式,我写了三个 linq 表达式来获取数据...如果我想要一个静态函数,基于它应该返回的聚合...
-
Prasad 不清楚,我认为您正在尝试创建一个返回所有 sum/cout/avg 的聚合函数。值或一对一表示一个函数的一个聚合函数(即总和)。