如何在 C# 中获取字典值 Collection 的计数
How to get count of Dictionary Value Collection in C#
我正在尝试获取字典值 collection 的计数,其中 collection 项的字段与 collection 中的键以及类型。
所以我的 collection 看起来像这样,注意 object 已初始化,这只是伪代码:
var results = Dictionary<string, List<CourseEnrollmentsByStudentSQLResult>();
现在 CourseEnrollmentsByStudentSQLResult 是一个数据传输 object,映射到从我的查询返回的行。
public class CourseEnrollmentsByStudentSQLResult
{
public int StudentID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string College { get; set; }
public int CollegeId { get; set; }
public string Prefix { get; set; }
public string CourseNumber { get; set; }
public string Course { get; set; }
public int CourseId { get; set; }
public string Program { get; set; }
public string Term { get; set; }
public string Status { get; set; }
public List<StudentCoursesSQLResult> Courses { get; set; }
}
您会注意到我的 CourseEnrollmentsByStudentSQLResult class 也有一个 collection of StudentCoursesSQLResult objects。这是我要根据两个条件计算的列表。
首先,课程(字典中的字符串 KEY)与 StudentCoursesSQLResult 的课程相匹配,然后我需要过滤 StudentCoursesSQLResult.类型.
这是 StudentCoursesSQLResult class:
public class StudentCoursesSQLResult
{
public int StudentID { get; set; }
public int Position { get; set; }
public string Prefix { get; set; }
public string CourseNumber { get; set; }
public string Course { get; set; }
public string Type { get; set; }
}
现在要获取计数,我正在遍历我的字典并为每个键输出 headers,这是我尝试输出字典值 collection 的计数。
foreach(var result in results) {
<span class="label label-default label-fat">
@result.Value.SelectMany(r => r.Courses).Count(c => c.Course == result.Key && c.Type == "required")
</span>
}
但由于某种原因它返回零,而我知道它不应该。
有人能给我指出正确的方向吗?到目前为止我在网上找到的所有东西都说使用 SelectMany,但我没有任何运气。
这是字典值 collection 的单个课程的调试输出屏幕截图,其中类型为 "required"。
查看您的屏幕截图,"Advanced French I: Structure and Expression" 与 "Medieval Art and Architecture" 的键不匹配,这解释不正确的计数。
相反,将 CourseEnrollmentsByStudentSQLResult
集合过滤为与字典键匹配的那些,然后 select 这些匹配记录中的所有课程,最后计算 "required" 的课程。
@result.Value.Where(r => r.Course == result.Key)
.SelectMany(r => r.Courses)
.Count(c => c.Type == "required");
vivat 的变体,如果您想在程序中执行此操作:
var cnt = selections.Where(r => r.Key == "Items").SelectMany(r => r.Value).Count();
“Items”是集合中的键值。在我的例子中,我创建了这个集合:
Dictionary<string, string[]> selections = new Dictionary<string, string[]>();
然后添加了一组基于键的简单值:
selections.Add("Items", txtItems.Text.Replace("\n", "").Split('\r'));
后来想看看有没有设置值,所以就用上面的方法来统计。它运行良好,在初始测试中它帮助我发现我需要在设置之前清理文本条目。
我正在尝试获取字典值 collection 的计数,其中 collection 项的字段与 collection 中的键以及类型。
所以我的 collection 看起来像这样,注意 object 已初始化,这只是伪代码:
var results = Dictionary<string, List<CourseEnrollmentsByStudentSQLResult>();
现在 CourseEnrollmentsByStudentSQLResult 是一个数据传输 object,映射到从我的查询返回的行。
public class CourseEnrollmentsByStudentSQLResult
{
public int StudentID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string College { get; set; }
public int CollegeId { get; set; }
public string Prefix { get; set; }
public string CourseNumber { get; set; }
public string Course { get; set; }
public int CourseId { get; set; }
public string Program { get; set; }
public string Term { get; set; }
public string Status { get; set; }
public List<StudentCoursesSQLResult> Courses { get; set; }
}
您会注意到我的 CourseEnrollmentsByStudentSQLResult class 也有一个 collection of StudentCoursesSQLResult objects。这是我要根据两个条件计算的列表。
首先,课程(字典中的字符串 KEY)与 StudentCoursesSQLResult 的课程相匹配,然后我需要过滤 StudentCoursesSQLResult.类型.
这是 StudentCoursesSQLResult class:
public class StudentCoursesSQLResult
{
public int StudentID { get; set; }
public int Position { get; set; }
public string Prefix { get; set; }
public string CourseNumber { get; set; }
public string Course { get; set; }
public string Type { get; set; }
}
现在要获取计数,我正在遍历我的字典并为每个键输出 headers,这是我尝试输出字典值 collection 的计数。
foreach(var result in results) {
<span class="label label-default label-fat">
@result.Value.SelectMany(r => r.Courses).Count(c => c.Course == result.Key && c.Type == "required")
</span>
}
但由于某种原因它返回零,而我知道它不应该。
有人能给我指出正确的方向吗?到目前为止我在网上找到的所有东西都说使用 SelectMany,但我没有任何运气。
这是字典值 collection 的单个课程的调试输出屏幕截图,其中类型为 "required"。
查看您的屏幕截图,"Advanced French I: Structure and Expression" 与 "Medieval Art and Architecture" 的键不匹配,这解释不正确的计数。
相反,将 CourseEnrollmentsByStudentSQLResult
集合过滤为与字典键匹配的那些,然后 select 这些匹配记录中的所有课程,最后计算 "required" 的课程。
@result.Value.Where(r => r.Course == result.Key)
.SelectMany(r => r.Courses)
.Count(c => c.Type == "required");
vivat 的变体,如果您想在程序中执行此操作:
var cnt = selections.Where(r => r.Key == "Items").SelectMany(r => r.Value).Count();
“Items”是集合中的键值。在我的例子中,我创建了这个集合:
Dictionary<string, string[]> selections = new Dictionary<string, string[]>();
然后添加了一组基于键的简单值:
selections.Add("Items", txtItems.Text.Replace("\n", "").Split('\r'));
后来想看看有没有设置值,所以就用上面的方法来统计。它运行良好,在初始测试中它帮助我发现我需要在设置之前清理文本条目。