我有两个班级:
public class firstClass
{
public int Id { get; set; }
public List<secondClass> Elements { get; set; }
}
public class secondClass
{
public int Id { get; set; }
public bool Is{ get; set; }
}
并使用他们的:
List<firstClass> list = allFirstClassFromDB.Include("Elements");
然后我的列表包含例如:
list[0] - {Id : 1, Elements : [0] { Id: 1, Is: true }, [1] { Id: 2, Is: true }, [2] { Id: 3, Is: false }
list[1] - {Id : 2, Elements : [0] { Id:4, Is: false }, [1] { Id: 5, Is: true }, [2] { Id: 6, Is: false }
list[2] - {Id : 3, Elements : [0] { Id:7, Is: false } }
所以我需要的结果只是这个包含Elements
的位置,其中Is
道具设置为true,如下所示:
list[0] - {Id : 1, Elements : [0] { Id: 1, Is: true }, [1] { Id: 2, Is: true } }
list[1] - {Id : 2, Elements : [0] { Id: 5, Is: true } }
linq有可能吗?任何帮助将不胜感激。
答案 0 :(得分:4)
以下是使用LINQ的方法:
var filteredList = list
.Select(
x => new firstClass {
Id = x.Id,
Elements = x.Elements.Where(y => y.Is).ToList()
}
)
.Where(x => x.Elements.Count > 0);
答案 1 :(得分:1)
首先,摆脱firstClass
没有任何secondClass.Is
true
Where
子句的firstClass
,然后重新构建secondClass.Is
以过滤所有{ {1}}真实
list.Where(f => f.Elements.Any(s => s.Is))
.Select(f => new firstClass() {
Id = f.Id,
Elements = f.Elements.Where(s => s.Is)
.ToList()
}).ToList();