2015-03-25 98 views
1

我正在尝试获取字典值集合的计数,其中集合项的字段与集合中的键匹配,以及类型。如何获取C#中字典值集合的计数

所以我的采集看起来像这样,注意初始化对象,这仅仅是伪代码:

var results = Dictionary<string, List<CourseEnrollmentsByStudentSQLResult>(); 

现在CourseEnrollmentsByStudentSQLResult是数据传输对象,映射到该行从我的查询返回。

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类也有StudentCoursesSQLResult对象的集合。这是我试图根据两个条件计算的清单。

先说当然,这是在字典中的字符串键,配StudentCoursesSQLResult的课程,然后我需要在StudentCoursesSQLResult。键入筛选。

这里是StudentCoursesSQLResult类:

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; } 
} 

现在让我遍历我的字典,并为每个键输出头的数量,这就是我想要的输出计数字典的值集合。

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,但我没有任何运气。

以下是字典值集合的单个课程的调试输出截图,其中Type为“required”。

enter image description here

+0

愚蠢的问题,但你有检查你的字符串比较实际上返回true? – 2015-03-25 03:06:42

+0

我复制了你的代码,并在非MVC环境中添加了一些记录(只是将结果写入控制台),并且它按预期工作。我认为你的代码的LINQ语句部分没有什么问题,假设数据很好并且匹配正确。 – 2015-03-25 03:13:04

+0

奇怪......这些字符串确实匹配,所以我不确定为什么我没有得到任何结果。看到我上面的编辑。 – 2015-03-25 03:14:57

回答

1

看你的屏幕截图,“高级法语我:结构与表达”不匹配“中世纪艺术与建筑”,这也解释了不正确计数的关键。

取而代之的是,将CourseEnrollmentsByStudentSQLResult集合过滤为与字典键匹配的集合,然后选择这些匹配记录中的所有课程,最后统计“必需”的课程。

@result.Value.Where(r => r.Course == result.Key) 
      .SelectMany(r => r.Courses) 
      .Count(c => c.Type == "required"); 
+0

谢谢格兰特。看起来我正在尝试最后一次完成密钥检查,而不是第一次。截图确实有正确的关键字,我只是扩展了其中的一个节点,所以人们可以看到类型字符串的匹配。非常感谢你。 :) – 2015-03-25 20:42:47

+0

不客气。 :) – 2015-03-25 21:07:40