The win was the 18th of the 2015 season for Kristoff and his second career victory in the Swiss race.
“Everything was there for me to win today, but you still need the legs to finish it off and I’m happy I had them today,” Kristoff said.
“I’ve won a stage here before and it was also uphill. I have very good memories of my first win here and today was quite similar to that.”
The break of the day contained world champion Michal Kwiatkowski (Etixx-QuickStep), Daryl Impey (Orica-GreenEDGE), Axel Domont (AG2R) and Silvan Dillier (BMC).
The dangerous quartet held the peloton off until the final kilometre before they were caught by another well timed chase led by Tinkoff-Saxo and Katusha.
“I just managed to hold Sagan off there at the end so I’m super happy. He was coming fast there at the end but I managed to answer his run,” Kristoff said.
“The last kilometers were very hard and we had some difficulties bringing back the break but we could see them just ahead of us, so I felt confident we could bring them back.”
The general classification was unchanged with Thibaut Pinot (FDJ.fr) holding onto the overall leader's yellow jersey after the 164km stage from Bienne to Duedingen.
A rolling 152.5km of racing awaits the riders for Stage 8 followed by four laps on an undulating circuit in Bern which could shake things up in the general classification ahead of Sunday’s closing time trial.
Stage 7: 164km, Bienne - Duedingen
1 Alexander Kristoff (NOR) Katusha 3hr 38min 7sec
2 Peter Sagan (SVK) Tinkoff-Saxo
3 Davide Cimolai (ITA) Lampre-Merida
4 Greg Van Avermaet (BEL) BMC
5 Arnaud Demare (FRA) FDJ.fr
6 Jurgen Roelandts (BEL) Lotto-Soudal
7 Sep Vanmarcke (BEL) LottoNL-Jumbo
8 Michael Albasini (SUI) Orica-GreenEDGE
9 Marco Marcato (ITA) Wanty-Groupe Gobert
10 Jose Joaquin Rojas (ESP) Movistar
1 Thibaut Pinot (FRA) FDJ.fr 25hr 55min 3sec
2 Geraint Thomas (GBR) Sky 0:00:37
3 Domenico Pozzovivo (ITA) AG2R 0:00:50
4 Simon Spilak (SLO) Katusha
5 Miguel Angel Lopez (COL) Astana 0:01:07
6 Jakob Fuglsang (DEN) Astana 0:01:22
7 Tom Dumoulin (NED) Giant-Alpecin 0:01:27
8 Steve Morabito (SUI) FDJ.fr 0:02:29
9 Sébastien Reichenbach (SUI) IAM 0:02:43
10 Sergio Henao (COL) Sky 0:02:46