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:
Comments
Post a Comment