Manchester City midfield pair Ilkay Gundogan and Fernandino were on target as Pep Guardiola’s Premier League superiority over West Ham continued.
City have now won 10 out of 11 top-flight meetings with the Hammers under the Spaniard.
In a game played in a snow-storm before half-time, skipper Gundogan provided the decisive moment after 33 minutes when he turned home a deflected Riyad Mahrez effort at the far-post.
It was the Germany midfielder’s third goal of the season – and his second in four league games – and was followed up in the final minute by Fernandinho, who had only been introduced three minutes earlier to tie the game up.
The veteran Brazilian had not scored a Premier League goal since October 2018 but found the target from the edge of the box.
Manuel Lanzini pulled one back with the final kick of the game, which cost Ederson his 100th clean sheet in all competitions but did nothing to prevent City moving back into second spot, six points clear of the Hammers.
The Londoners remain fourth despite suffering successive Premier League defeats for the first time since April.
Weather main threat to City win
Guardiola should offer special thanks to head groundsman Lee Jackson and his team for this latest victory.
As half-time approached with heavy snow falling on a pitch already covered in it, there was a real fear the game might not reach its conclusion.
Yet Jackson and his colleagues got to work and with the aid of a half-time interval extended by referee Michael Oliver by five minutes, and the surface was clear again when the game restarted, by which time the snow had stopped.
Jackson’s reward was an effective home display, even if it was some way short of show-stopper.
West Ham keeper Lucasz Fabianski denied Gundogan a second and Bernardo Silva’s excellent chipped finish counted for nothing thanks to an offside flag.
And Ederson, whose only significant save was turning away a fierce Declan Rice shot, was denied his personal milestone with a goal out of virtually nothing from Lanzini, when West Ham had no time to even think about an equaliser.
Despite losing 22 out of 25 previous away games against the defending champions, West Ham can rarely have gone into such a fixture in more optimistic mood.
Yet they never really got going.
Fabianski was booed by the City fans inside the opening 10 minutes for apparent time-wasting and the experienced Poland goalkeeper was soon earning the wrath of David Moyes for a fluffed clearance that would have resulted in a goal had Mahrez not been offside when Raheem Sterling’s block landed at his feet.
Arthur Masuaku’s selection ahead of Jarrod Bowen was supposed to provide more protection down the West Ham left flank but City’s array of attacking talent just found spaces elsewhere.
Ben Johnson’s goalline clearance to deny Mahrez, who also hit the outside of the post, before half-time was followed up by Ryan Cresswell bravely sliding in to turn Gabriel Jesus’ goal-bound effort away for a corner. It was effectively Cresswell’s final contribution as he continued into the post with such force he needed to be replaced by Vladimir Coufal after hurting his back.
It made no fundamental difference to the flow of the game and West Ham will be thankful for the failings of others that their position in the table remains as it was.
Manchester City’s next Premier League game is at Aston Villa on Wednesday, 1 December (20:15 GMT). West Ham entertain Brighton at London Stadium on the same day (19:30 GMT).