在Linq,如何获得父母的名单,他们的孩子有一个特殊的年龄和其他childern删除太?

ymdaylpp  于 2023-11-14  发布在  其他
关注(0)|答案(2)|浏览(93)

我有两个模型:父母和孩子

public class Parent
{
    public int ID { get; set; }
    public string Name{ get; set; }

    public virtual ICollection Children { get; set; }
}
public class Child
{
    public int ID { get; set; }
    public int ParentID { get; set; }
    public string Name{ get; set; }
    public int Age{get; set;}

    [ForeignKey("ParentID")]
    public virtual Parent Parent { get; set; }
}

字符串
样本数据:

Parent            Child  

ID      Name     ID    Name    Age  ParentID
1       a        1       a1     10     1
2       b        2       a2     20     1
3       c        3       a3     25     1
4       d        4       b1     30     2
5       e        5       b2     35     2
                 6       c1     27     3
                 7       d1     10     4
                 8       d2     18     4
                 9       d3     26     4
                 10      e1     15     5


我想显示一个父母的列表,这些父母有任何超过特定年龄的孩子,这个列表将被加入孩子模型,在孩子子集中,只显示特定年龄的孩子。
期望输出:

parents
ID      Name  Children.ID Children.Name   Age  
1       a        3            a3          25     
2       b        4            b1          30     
3       c        5            b2          35     
4       d        6            c1          27     
                 9            d3          26


注意:子表位于父字段中。
我测试了这段代码,但它显示了所有孩子的父母:

var parents = context.Parents.Include(p => p.Children).ToList();

  // some processes on parents...

parents = parents.Where(p => p.Children.Any(c => c.Age >= 25)).ToList();


输出量:

parents
ID      Name  Children.ID Children.Name  Age  
1       a        1                a1     10     
2       b        2                a2     20     
3       c        3                a3     25     
4       d        4                b1     30     
                 5                b2     35     
                 6                c1     27     
                 7                d1     10     
                 8                d2     18     
                 9                d3     26


如何在Linq查询中过滤子项?

wztqucjr

wztqucjr1#

您可以过滤相关图元,如过滤的包含中所示。

var parents = context.Parents
    .Include(p => p.Children
        .Where(c => c.Age >= 25))
    .Where(p => p.Children.Any(c => c.Age >= 25))
    .ToList();

字符串

更新时间:

作为要求,您需要检索所有Parent数据并在一些处理步骤之后进行筛选。您应该删除每个父数据并使用筛选后的Children数据覆盖Children值。

var parents = context.Parents.Include(p => p.Children).ToList();

...

parents = parents.Where(p => p.Children.Any(c => c.Age >= 25)).ToList();

parent.ForEach(p => 
{ 
    p.Children = p.Children
        .Where(c => c.Age >= 25)
        .ToList(); 
});

zte4gxcn

zte4gxcn2#

试试这个:

parents = parents.Where(p => p.Children.Any(c => c.Age >= 25)).Select(s=>new Parent {
ID=s.ID,
Name=s.Name,
Children= s.Children.Where(c => c.Age >= 25).ToList(),
}).ToList()

字符串

相关问题