1

私には2つのクラスがあります:

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、次のような真の小道具が設定されています。

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

まず、by句firstClassがないものを削除してから、すべてtrueをフィルタリングするためだけに再構築しますsecondClass.Is trueWherefirstClasssecondClass.Is

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 に答える