The simplest IMO approach would be to generate a sequence of all possible numbers (i.e. 1-37), shuffle the collection, and then accept the first seven results.
A stack overflow search for "Fisher-Yates shuffle C #" will find many examples.
In fact, you can modify Shuffle Fisher-Yates to get results as they are taken, so you can write a method such as:
var numbers = Enumerable.Range(1, 37).Shuffle().Take(7).ToList();
source share