Just to make mquander’s suggestion concrete:
var groupedDemoClasses = mySpecialVariableWhichIsAListOfDemoClass
.GroupBy(x => x.GroupKey)
.ToDictionary(gdc => gdc.Key, gdc => gdc.ToList());
You’d make it shorter if you used shorter variable names too, of course 🙂
However, might I suggest that a Lookup might be more appropriate? A Lookup is basically a dictionary from a key to an IEnumerable<T> – unless you really need the values as a list, it makes the code even shorter (and more efficient) with the ToLookup call:
var groupedDemoClasses = mySpecialVariableWhichIsAListOfDemoClass
.ToLookup(x => x.GroupKey);