【问题标题】:Select nested collection's property in select clause在 select 子句中选择嵌套集合的属性
【发布时间】:2014-01-30 22:10:12
【问题描述】:

我正在使用 System.Linq.Dynamic,github's repository 上的版本。

我对 NON System.Linq.Dynamic 解决方案不感兴趣。

我正在尝试对嵌套集合的属性执行选择。假设我们有以下情况:

public class Region
{
  public int Id { get; set; }
  public List<Town> Towns { get; set; }
}
public class Town
{
  public int Id { get; set; }
  public string Name { get; set; }
}

是否可以“选择”地区的 id 和城镇名称? 类似的东西:

someListofRegions.Select("new(Id, Towns.Name)")

其中"new(Id, Towns.Name)" 是动态Linq 表达式。

当然上面的例子失败了。

【问题讨论】:

  • 您找到解决方案了吗?我也是这种情况

标签: c# linq dynamic-linq


【解决方案1】:

您不能对嵌套集合的属性执行选择,因为这需要展平生成的集合。

通常你会使用 SelectMany() 来做这个展平,但是因为你想使用 System.Linq.Dynamic 并且我不相信这个库有一个动态的 SelectMany() 这可能是不可能的。您可以使用表达式树编写自己的 SelectMany(),这应该不会太难。

或者,您可能会发现 GroupBy 在这里更适合您的需求,我个人看不出想要收集地区 ID 和城镇名称的好处 - 会有大量重复的地区 ID。

【讨论】:

  • 不需要 SelectMany,你可以只写 Select(region => new { region.Id, region.Towns.Select(t => t.Name)) - 但没有'动态'位
  • 抱歉回复晚了,但是您在那里编写的代码将返回与 GroupBy() 返回的类似的匿名类型集合。它不会返回区域 ID 和城镇名称的扁平列表,我相信这是他在问题中所要求的。这就是为什么我建议他可能需要 GroupBy() 而不是 Select()
猜你喜欢
  • 1970-01-01
  • 2021-10-11
  • 2012-09-17
  • 1970-01-01
  • 1970-01-01
  • 2021-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多