简体   繁体   中英

Using LINQ to build a cascading list in C#

I have a need to display a list of departments and sub-departments. I am loading the list of departments properly.

At this time, I have:

var deparmentList = Departments.LoadList();
var departments = new List<ListItem>(
  from department in departmentList
  select new ListItem {
    Text = department.Name,
    Value = department.Id.ToString(),
    IsSelected = department.IsActive
  }
);

I now need to load the list of sub-departments. Each sub-department has an Id , DepartmentId , and Name . However, I only want to get the sub-departments associated with departments that are selected. Currently, I have the following:

var subDepartmentList = SubDepartment.LoadList(); 
var subdepartments = new List<ListItem>(
  from subdepartment in subDepartmentList
//  where ?
  select new ListItem {
    Text = subdepartment.Name,
    Value = subdepartment.Id.ToString(),
    IsSelected = false
  }
);

I'm not sure how to do the join or filter between the two. How do I do this in LINQ?

var selectedDepartmentSubDepartments = 
    from dep in departments 
    join subDep in subDepartmentList
    on dep.Value equals subDep.Id.ToString()
    where dep.IsSelected
    select new ListItem {
        Text = subDep.Name,
        Value = subDep.Id.ToString(),
        IsSelected = false
    };
var subdepartments = new List<ListItem>(selectedDepartmentSubDepartments);

You can add a where clause that checks if at least one associated and 'selected' department exists:

var subDepartmentList = SubDepartment.LoadList(); 
var subdepartments = new List<ListItem>(
  from subdepartment in subDepartmentList
  where departments.Any(x => x.IsSelected && 
                        x.Value == subdepartment.DepartmentId.ToString()) 
  select new ListItem {
    Text = subdepartment.Name,
    Value = subdepartment.Id.ToString(),
    IsSelected = false
  }
);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM