如何使lambda列在列表中?

时间:2012-09-26 07:06:09

标签: c# linq list lambda

我有两个班级:

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有可能吗?任何帮助将不胜感激。

2 个答案:

答案 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();