【问题标题】:C# linq in Dictionary<>字典中的 C# linq<>
【发布时间】:2011-02-02 17:19:39
【问题描述】:

我有一个对象allStudents = Dictionary&lt;ClassRoom, List&lt;Student&gt;&gt;()

在 Linq 中,我如何获得所有男性学生的列表? (student.Gender=="m") 来自所有教室?

伊恩

【问题讨论】:

  • stackoverflow 上有很多作业题。只需适当地标记。 (无论如何,我认为这不是。)
  • 我使用了这些对象,因为它们会被普遍理解。一般用户不会知道真正的业务对象。我毕业太多年了,再也没有作业了;)

标签: c# linq dictionary


【解决方案1】:

试试下面的

var maleStudents = allStudents
  .SelectMany(x => x.Values)
  .Where(x => x.Gender=="m");

这个技巧是SelectMany 操作。它具有将List&lt;Student&gt; 的集合展平为Student 的单个集合的效果。结果列表与您将每个列表从前到后排列一样。

【讨论】:

  • 是的,C# 编译器将查询转换为稍微复杂一些的代码,但我认为在任何合理的情况下,差异并不重要。更重要的是选择看起来更具可读性的解决方案(这是个人意见)。
【解决方案2】:

您可以使用嵌套的from 子句。第一个from 选择所有班级及其学生(字典中的一项),表示为KeyValuePair&lt;ClassRoom, List&lt;Student&gt;&gt;。然后,您可以使用 Value 属性从班级中选择所有学生并过滤他们:

var q = from cls in allStudents
        from s in cls.Value
        where s.Gender == "M" select s;

在幕后,嵌套的from 子句被转换为SelectMany 方法调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多