score:4

I don't know of a way to access it through a named property like "Results.ListA" and "Result.ListB" without using reflection which would be MUCH more costly, but this will get you pretty close by accessing by the position:

var results = allItems.GroupBy(item => item.IsUseful).ToList();
results.First();  // this will access listA
results.Last();   // this will access listB

Or in query syntax as that's what you stated in the question:

var results = (from x in allItems
               group x by x.IsUseful
               into groupings
               select groupings).ToList(); 

results.First();  // this will access listA
results.Last();   // this will access listB

score:8

This will give you a Dictionary<bool, List<T>> with two lists, which you can easily get your lists with result[true] and result[false]:

var result = allItems.GroupBy(item => item.IsUseful)
                     .ToDictionary(x => x.Key,x => x.ToList());

Related Query