public async Task <IActionResult> GetAllMenus(String restaurantName) { var expr = from selectRestaurant in RestaurantDomain.GetRestaurant(restaurantName) let restaurant = (selectRestaurant as RestaurantSelected)?.RestaurantAgg from populatedRestaurant in RestaurantDomain.PopulateRestaurant(restaurant, RestaurantDomain.GetAllMenus, RestaurantDomain.GetAllMenuItems, interpreter) let newRestaurant = (populatedRestaurant as RestaurantPopulated)?.RestaurantAgg select populatedRestaurant; var exprResult = await interpreter.Interpret(expr, Unit.Default); return(await exprResult.MatchAsync <IActionResult>( async (selected) => { var getAllMenusExpr = from getAllMenus in RestaurantDomain.GetAllMenus(selected.RestaurantAgg.Restaurant.Id) select getAllMenus; var getAllMenusResult = await interpreter.Interpret(getAllMenusExpr, Unit.Default); return (IActionResult)Ok(JsonConvert.SerializeObject(getAllMenusResult)); }, async (notSelected) => NotFound() )); }