c# - Lambda with nested classes -


i have posted question while ago got partial answer issue, thought post more explanation hoping more accurate answer. have 2 classes:

public class employee {     public string name { get; set; }     public list<cars> cars { get; set; } }  public class car {     public int carid { get; set; }     public cartypes cartype { get; set; }     public enum cartypes     {         van,         smallcar     } } 

i'm trying employees have vans allocated ignoring smallcars using lambda, tried line:

list<employee> employeeswithvans = allemployees.where(emps => emps.car.any(cartype => cartype.cartype == car.cartypes.van)).tolist(); 

but gets employees if @ least 1 van allocated employee (.any) if try (.all) bring nothing not employees has van.

any idea if can achieved using nested lambda?

thanks.

edit:

employee mark = new employee(); mark.cars.add(new car() { cartype = car.cartypes.van, carid = 12 }); mark.cars.add(new car() { cartype = car.cartypes.van, carid = 13 }); mark.cars.add(new car() { cartype = car.cartypes.smallcar, carid = 14 });  employee lisa = new employee(); lisa.cars.add(new car() { cartype = car.cartypes.van, carid = 15 }); lisa.cars.add(new car() { cartype = car.cartypes.smallcar, carid = 16 }); lisa.cars.add(new car() { cartype = car.cartypes.smallcar, carid = 17 });      list<employee> employeeswithvans should contain:      employee filteredmark contains:     mark.cars.add(new car() { cartype = car.cartypes.van, carid = 12 });     mark.cars.add(new car() { cartype = car.cartypes.van, carid = 13 });      employee filteredlisa contains:     mark.cars.add(new car() { cartype = car.cartypes.van, carid = 15 }); 

try instead:

list<employee> temp = allemployees.where(emps => emps.cars.any(cartype => cartype.cartype == cars.cartypes.van)).tolist();  list<employee> employeeswithvans = (from item in temp            select new employee{                                       name = item.name,                                       cars = (item.cars.where( car => car.cartype == cars.cartypes.van)).tolist()                                }).tolist(); 

this tried (in linqpad):

void main() {     list<employee> allemployees = new list<employee>();      list<cars> lcars1 = new list<cars>();     cars car1 = new cars();     car1.cartype = cars.cartypes.van;     lcars1.add(car1);lcars1.add(car1);      cars car2 = new cars();     car2.cartype = cars.cartypes.smallcar;     lcars1.add(car2);      list<cars> lcars2 = new list<cars>();     lcars2.add(car1);lcars2.add(car2);lcars2.add(car2);      allemployees.add(new employee(){ name="emp1", cars = lcars1});     allemployees.add(new employee(){ name="emp2", cars = lcars2});     allemployees.add(new employee(){ name="emp3", cars = lcars1 });     allemployees.add(new employee(){ name="emp4", cars = lcars2});      list<employee> temp = allemployees.where(emps => emps.cars.any(cartype => cartype.cartype == cars.cartypes.van)).tolist();      list<employee> employeeswithvans = (from item in temp             select new employee{                                          name = item.name,                                          cars = (item.cars.where( car => car.cartype == cars.cartypes.van)).tolist()                                 }).tolist();      employeeswithvans.dump(); } 

output:

enter image description here


Comments

Popular posts from this blog

c# - How to set Z index when using WPF DrawingContext? -

razor - Is this a bug in WebMatrix PageData? -

visual c++ - Using relative values in array sorting ( asm ) -