我有两个班的父母和孩子。我想让所有满足其子女条件的父母,例如所有父母及其子女。我想使用Linq
。我使用了以下Linq
查询,它返回了所有带女童的父母,但是,儿童名单也包含了男童。我只想让父母和他们的小孩来List<Parent> parentsAndFemaleChildren
。请参阅以下Linq
查询:
List<Parent> parentsAndFemaleChildren = Parents
.Where(p => p.Children.Any((c => c.Gender == "Female")))
.ToList();
填充数据的代码如下所示。
public class Parent
{
public int ParentId {get;set;}
public string ParentName {get;set;}
public List<Child> Children {get;set;}
}
public class Child
{
public int ChildId {get;set;}
public string ChildName {get;set;}
public string Gender {get;set;}
public int ParentId {get;set;}
}
我已经按照以下方式填充了数据。
public static void Main()
{
List<Parent> Parents = new List<Parent>();
Parent p1 = new Parent();
p1.ParentId = 1;
p1.ParentName = "Parent 1";
Parents.Add(p1);
Child p1C1 = new Child();
p1C1.ChildId = 1;
p1C1.ChildName = "Parent 1 Child 1";
p1C1.Gender = "Male";
p1C1.ParentId = 1;
p1.Children = new List<Child>();
p1.Children.Add(p1C1);
Child p1C2 = new Child();
p1C2.ChildId = 2;
p1C2.ChildName = "Parent 1 Child 2";
p1C2.Gender = "Female";
p1C2.ParentId = 1;
p1.Children.Add(p1C2);
Parent p2 = new Parent();
p2.ParentId = 2;
p2.ParentName = "Parent 2";
Parents.Add(p2);
Child p2C1 = new Child();
p2C1.ChildId = 3;
p2C1.ChildName = "Parent 2 Child 1";
p2C1.Gender = "Female";
p2C1.ParentId = 2;
p2.Children = new List<Child>();
p2.Children.Add(p2C1);
Child p2C2 = new Child();
p2C2.ChildId = 4;
p2C2.ChildName = "Parent 2 Child 2";
p2C2.Gender = "Male";
p2C2.ParentId = 2;
p2.Children.Add(p2C2);
Parent p3 = new Parent();
p3.ParentId = 3;
p3.ParentName = "Parent 3";
Parents.Add(p3);
Child p3C1 = new Child();
p3C1.ChildId = 5;
p3C1.ChildName = "Parent 3 Child 1";
p3C1.Gender = "Male";
p3C1.ParentId = 3;
p3.Children = new List<Child>();
p3.Children.Add(p3C1);
DisplayFemaleChildrenAndParents(Parents);
}
public static void DisplayFemaleChildrenAndParents(List<Parent> Parents)
{
List<Parent> parentsAndFemaleChildren = Parents.Where(p => p.Children.Any((c => c.Gender == "Female"))).ToList();
Console.WriteLine("\nShould Display Parents and their Female children details ONLY\n");
foreach(Parent p in parentsAndFemaleChildren)
{
Console.WriteLine("***********");
foreach(Child c in p.Children)
{
Console.WriteLine(p.ParentName + " - " + c.ChildName + " - " + c.Gender);
}
Console.WriteLine("***********");
}
}
完整的代码可以看出,并通过运行拨弄DOTNET点击此处。
如果您需要过滤仅有女童的父母,则应使用ALL
linq方法。
确定序列中的所有元素是否都满足条件。
List<Parent> parentsAndFemaleChildren = Parents
.Where(p => p.Children.All((c => c.Gender == "Female"))).ToList();
如果您想让父母育有至少一个女童,并且只选择女童,则可以使用以下select
方法Where
:
List<Parent> parentsAndFemaleChildren = Parents
.Where(p => p.Children.Any((c => c.Gender == "Female")))
.Select(s => new Parent { ParentId = s.ParentId, ParentName = s.ParentName,
Children = s.Children.Where(ch => ch.Gender == "Female").ToList()}).ToList();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句