代码之家  ›  专栏  ›  技术社区  ›  falukky

Linq:基于属性获取我的所有子对象

  •  0
  • falukky  · 技术社区  · 6 年前

    所以我有这些课程:

    public class Product
    {
        public string Name { get; set; }
        public List<Application> Applications { get; set; }
    }  
    
    
    public class Application
    {
        public string Name { get; set; }
        public string Mode { get; set; }
        public List<Folder> Folders { get; set; }
     }
    
    
    public class Folder
    {
        public string Name { get; set; }
    
        public bool IsSelected{ get; set; }
    
        public FileInfo[] Tests { get; set; }
    }
    

    我有这个 ObservableCollection 收藏:

    private ObservableCollection<Product> products;
    
    public ObservableCollection<Product> Products
    {
        get { return products; }
        set
        {
            products = value;
            NotifyPropertyChanged();
        }
    }
    

    我的 ListView 有这个 CheckBox 改变了这个文件夹 IsSelected 属性,我希望通过 Linq :

    var selectedFolders = Products.Where(x => x.Applications = ...);
    

    有隔离吗?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Sweeper    6 年前

    你可以用两个 SelectMany 调用扁平化 ObservableCollection<Product> 变成一个 IEnumerable<Folder> . 那你就可以用 Where :

    var selectedFolders = Products.SelectMany(x => Applications)
                                    .SelectMany(x => x.Folders)
                                    .Where(x => x.IsSelected);