KANSAS CITY, Mo. -- The Kansas City Royals are starting to embrace quite the never-say-quit mentality.
Trailing in the seventh inning? No need to worry.
Game tied in the eight? Perfect position.
Jarrod Dyson delivered an infield single with the bases loaded and two outs on Saturday, and stingy closer Greg Holland preserved the Royals' scrappy 4-3 victory over Oakland with a perfect ninth inning that gave Kansas City its first win over the Athletics this season.
"Sometimes games aren't going to go our way, but we aren't going to hang our heads," said Dyson, who snapped an 0-for-11 skid with three hits. "We're going to keep battling. You can see it in here, see it out there. Everybody is working hard every day."
Dyson, hardly known for his power, showed bunt on his first pitch from Cook (1-2) before hitting a grounder deep behind second base. Shortstop Adam Rosales fielded it cleanly but didn't even bother with a throw as pinch runner Alcides Escobar scored the go-ahead run.
It was an error on Rosales that kept the inning alive.
"It's going to stick with me for a little while," he said.
Aaron Crow (6-3) worked the eighth and Holland handled the ninth for his 20th save, wrapping up Kansas City's first win in five tries against Oakland this season.
"They've been grinder games. Their pitching staff is very, very good. Their starting rotation is very good," Royals manager Ned Yost said. "We just scrapped it. We scrapped it out."
Mike Moustakas homered and Billy Butler drove in a run for the Royals, while Alex Gordon walked three times and reached on an error in his return to the lineup. He'd missed the last two games after a scary collision with the outfield wall Wednesday night against Cleveland.
"Once I got the Adrenaline going and did some work, it felt pretty good," Gordon said.
The Royals tried to get the run back in the bottom half when Miguel Tejada singled and reached second on a groundout. Moments later, Elliot Johnson hit a grounder toward third with two outs and appeared to be safe when the throw pulled first baseman Brandon Moss off the bag.
Umpire Marty Foster ruled him out, though, and never wavered from his decision despite some rather animated objections from Yost and first base coach Rusty Kuntz.
A bright sun and flat sky started to cause problems after that.
The A's had two aboard with one out in the third when Donaldson hit a high popup down the right-field line. Johnson chased it from second and outfielder David Lough sprinted in from right while Hosmer tried to camp under it from first base -- all to no avail.
The ball fell in fair territory, allowing John Jaso to score for a 2-0 lead.
In the bottom half of the inning, Dyson led off with a weak pop foul behind the plate, but Jaso couldn't locate the ball in the sun after discarding his mask. The A's catcher comically had to cover his head with his glove while the ball plopped onto the field next to him.
Dyson followed with a single to right, and after a stolen base and errant pickoff throw, he scampered home from third on Butler's groundout to get the Royals within 2-1.
Moustakas added his two-out homer in the fourth to tie the game, and Donaldson's solo shot leading off the sixth restored Oakland's one-run cushion. The Royals knotted the game again when they loaded the bases with one out in the seventh and Hosmer hit a sacrifice fly to center.
Jarrod Parker wound up going 6 1/3 innings for the A's after leaving his last start with tightness in his right hamstring, but it was the bullpen that let them down.
"That was a very poor game," A's manager Bob Melvin said. "The way we started and the way we ended. A very bad game for us."
A's DH Yoenis Cespedes was back in the No. 3 spot in the lineup after getting dropped to No. 6 on Friday. ... Escobar was given the day off from the starting lineup because he's been "grinding," Yost said. The SS is also expected to get the day off Sunday. ... RHP A.J. Griffin will start the series finale for Oakland against Royals RHP Luis Mendoza.