C# 如何在一个对象中使用两个元素的Group by并获取列表中的计数?
我有一个学生名单C# 如何在一个对象中使用两个元素的Group by并获取列表中的计数?,c#,linq,list,count,group-by,C#,Linq,List,Count,Group By,我有一个学生名单 public class Student { string Name; string Class; string Division; } 我还有一门课,像StudentCount public class StudentCount { string Class; string Division; string Count; } 我必须从列表(学生)中填充列表(学生计数) 用于上述结果的SQL语句 select Class,di
public class Student
{
string Name;
string Class;
string Division;
}
我还有一门课,像StudentCount
public class StudentCount
{
string Class;
string Division;
string Count;
}
我必须从列表(学生)中填充列表(学生计数)
用于上述结果的SQL语句
select Class,division,count(*)
from Student
group by Class, Division
学生数据
Name - Class - Division
Aa - 1 - A
Bc - 1 - A
Cc - 1 - B
Dd - 2 - A
我在寻找这样的结果
预期结果
Class - Division - Count
1 - A - 2
1 - B - 1
2 - A - 1
我在列表中有学生数据(学生)。
我必须在列表中获得结果(StudentCount)
任何人都可以通过在C#?中帮助实现此结果。您可以使用匿名对象进行分组:
var groups = data.GroupBy(item => new { item.Class, item.Division });
.Select(item => new StudentCount
{
Class = item.Key.Class,
Division = item.Key.Divison,
Count = item.Count()
});
您可以使用匿名对象进行分组:
var groups = data.GroupBy(item => new { item.Class, item.Division });
.Select(item => new StudentCount
{
Class = item.Key.Class,
Division = item.Key.Divison,
Count = item.Count()
});
假设您将内部字段升级为公共属性,我相信下面的Linq查询满足您的要求
students
.GroupBy(s => new{s.Class, s.Division})
.Select(g => new StudentCount{Count = g.Count(),
Class = g.Key.Class,
Divison = g.Key.Division})
假设您将内部字段升级为公共属性,我相信下面的Linq查询满足您的要求
students
.GroupBy(s => new{s.Class, s.Division})
.Select(g => new StudentCount{Count = g.Count(),
Class = g.Key.Class,
Divison = g.Key.Division})
首先,将您的类成员设置为公共的(但不建议在类中设置公共字段)。像这样:
public class Student
{
public string Name;
public string Class;
public string Division;
}
然后用这个:
var groups = data.GroupBy(item => new { item.Class, item.Division })
.Select(item => new StudentCount()
{
Class = item.Key.Class,
Division = item.Key.Division,
Count = item.Count().ToString() //the Count is of type string, so don't forget to make the proper conversion
});
首先,将您的类成员设置为公共的(但不建议在类中设置公共字段)。像这样:
public class Student
{
public string Name;
public string Class;
public string Division;
}
然后用这个:
var groups = data.GroupBy(item => new { item.Class, item.Division })
.Select(item => new StudentCount()
{
Class = item.Key.Class,
Division = item.Key.Division,
Count = item.Count().ToString() //the Count is of type string, so don't forget to make the proper conversion
});
你自己试过什么吗?关于StackOverflow的问题预计会代表提问者表现出一定程度的努力……你自己试过什么吗?关于StackOverflow的问题预计会代表提问者显示出一定程度的努力……他还需要计数:(@Julie Shannon谢谢,修正了这个问题。他还需要计数:(@Julie Shannon谢谢,修复了这个问题。@OndrejJanacek:除了关于冗余代码的Resharper警告之外,您的编辑给表带来了什么?
Class=
和Division=
是冗余的,但我并不是输入editwar来修复它。我实际上认为有必要指定您在使用时分配给的属性e对象初始值设定项…如果名称与映射属性完全匹配,则不需要。Count
类型为string!我不想重复这种愚蠢行为。我确信OP可以拥有一个字符串(如果他们真的想要)。我不需要。@OndrejJanacek:除了关于冗余代码的重新锐化警告之外,您的编辑会给表带来什么?Class=
和Division=
是多余的,但我并没有输入editwar来修复它。我实际上认为,在使用对象初始值设定项时,有必要指定要分配给的属性……如果名称与映射属性完全匹配,则不必指定。Count
是字符串类型!我不想重复这种愚蠢行为。我很抱歉如果他们真的想要的话,我肯定OP可以有一个字符串。我没有。