【问题标题】:How make lambda where on list of list?如何使 lambda 在列表中的位置?
【发布时间】:2012-09-26 07:06:09
【问题描述】:

我有两个班级:

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

【问题讨论】:

    标签: c# linq list lambda


    【解决方案1】:

    以下是使用 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);
    

    【讨论】:

      【解决方案2】:

      首先,通过Where子句去掉没有任何secondClass.IstruefirstClass,然后重新构建firstClass只是为了过滤所有secondClass.Is true

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-07-24
        • 1970-01-01
        • 1970-01-01
        • 2020-02-02
        • 1970-01-01
        • 2021-12-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多