McDavid assisted on his team's first two goals before scoring Edmonton's next three. Ryan Nugent-Hopkins added a pair of goals for the Oilers. Alex Chiasson and Josh Archibald also scored for Edmonton.
Andrew Mangiapane scored the Flames' (8-9-1) lone goal.
Jacob Markstrom made 10 saves on 15 shots being pulled for David Rittich in the second period. Rittich ended his night with seven saves on nine shots.
Mikko Koskinen made 43 saves for Edmonton (12-8-0).
Alex Chiasson scored a power play goal nearly three minutes and 30 seconds into the first period. He redirected a pass from Connor McDavid into the net and past Markstrom.
The Oilers then doubled their advantage with a goal from Ryan Nugent-Hopkins over a minute later, with McDavid yet again picking up an assist.
Andrew Mangiapane cut the Oilers' lead in half with a goal of his own. It came amidst a goalmouth scramble in front of Koskinen. The referees reviewed the play before confirming their initial call on the ice.
McDavid scored his team's second power play goal of the night after tipping a point shot from Tyson Barrie. It was his third point of the period.
The Oilers captain scored his second of the game in the second period. He took the puck away from Flames defender Noah Hanifin before he charged up the wing. He entered the zone and looked as if he was going to pass to a teammate, drawing a defender towards him.
Instead, he fired on net and beat Markstrom for his 11th goal of the season.
McDavid completed the hat-trick before the mid-point of the period.
Nugent-Hopkins added his second of the game with 7:22 left in the period. McDavid didn't register a point on the play, but he was on the ice.
Archibald scored his team's seventh of the game 36 seconds into the third period, putting the lead well out of reach for the rival Flames.
NOTES: Edmonton Oilers defenceman Slater Koekkoek left the game in the first period after taking a hit from Calgary Flames forward Sam Bennett.