Skip to main content
 首页 » 编程设计

c#之在 select 子句中选择嵌套集合的属性

2024年01月13日29lori

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

我对非 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 表达式。

当然上面的例子失败了。

请您参考如下方法:

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

通常您会使用 SelectMany() 来进行这种扁平化,但由于您想使用 System.Linq.Dynamic 并且我不认为该库具有动态 SelectMany() 这可能是不可能的。您可以使用表达式树编写自己的 SelectMany(),这应该不会太难。

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