Also he got outspent 5 to 1 from his opponent. He didn't raise money and he wasn't considered a great candidate.
He may have been outspent if we look only at his own campaign's fundraising. However, that was more than made up for with NRCCC and outside group money. They dumped over $9M into the race. Democratic groups and unions didn't even spend $1M in the race.
And it's true that Saccone wasn't a great candidate, and the Party really screwed up by choosing him over two much better candidates, either of whom would have almost surely defeated Lamb. In fact, one of his opponents had a similar profile to Lamb's. He was a sharp, young guy (just a year older than Lamb) who served honorably in the military as a JAG officer.
Saccone was no dummy. The guy had a Ph.D., but he just didn't have much appeal. And though he identified with Trump a lot, he wasn't particularly favorable to organized labor in a mostly pro-union district.
Nevertheless, I may have found the real reason voters rejected Saccone - he got his MPA from Oklahoma. Can you really blame them for rejecting him?