1

我有两节课:

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 } }

所以我需要的结果只是这个位置,它包含ElementsIsprop 设置为 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中可以吗?任何帮助,将不胜感激。

4

2 回答 2

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);
于 2012-09-26T07:17:42.403 回答
1

首先去掉firstClass哪个没有secondClass.Is truebyWhere子句,然后重新构建firstClass只是为了过滤所有secondClass.Istrue

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();
于 2012-09-26T07:21:23.750 回答