LINQ方法如何从父类中选择具有附加列的many
本文关键字:many 选择 方法 父类 LINQ | 更新日期: 2023-09-27 17:52:46
我有一个类:
public class Parent
{
public int ParentID { get; set; }
public string ParentName { get; set; }
public List<Child> Childs { get; set; }
}
public class Child
{
public int ChildID { get; set; }
public string ChildName { get; set; }
}
使用Parent
对象,以下是我如何获得所有Childs
值的方法。
Parent obj = GetParent();
PrintExcel(obj.SelectMany(sm => sm.Childs);
但是我也想在选择命令中包含ParentName
值,如何实现这一点?
使用SQL查询,我可以这样做
SELECT
p.ParentName,
c.ChildName
FROM
Parent p
INNER JOIN Child c ON
p.ParentID = c.ParentID
您的LINQ示例有缺陷。假设您有一个名为parents
的Parent
(即IEnumerable<Parent>
或IQueryable<Parent>
)的序列,您可以至少通过两种方式访问SelectMany
内部的父级:
(A)在SelectMany
中使用Select
:
parents.SelectMany(p => p.Childs.Select(c => new { p.ParentName, c.ChildName }))
(B)使用SelectMany
重载,允许您传递结果选择器:
parents.SelectMany(p => p.Childs, (p, c) => new { p.ParentName, c.ChildName })
当然,你可以简单地使用查询语法,让编译器为你确定正确的方法:
(from p in parents from c in p.Childs select new { p.ParentName, c.ChildName })