I believe you just want to group your questions using .GroupBy(n=>n.Oid) (I've made the assumption that each question has a unique Oid as it is a Guid)
var questions = (from q in dt.AsEnumerable()
where (q.Field<Guid>("Question") != null))
select new Question
{
Oid = q.Field<Guid>("Question"),
QuestionContext = q.Field<String>("QuestionContext"),
Priority = q.Field<Int32>("Priority"),
Order = q.Field<Int32>("OrderQuestion"),
Subject = q.Field<Guid>("Subject"),
Answers = (from a in dt.AsEnumerable()
where a.Field<Guid>("Question") == q.Field<Guid>("Question")
select new Answer
{
Oid = a.Field<Guid>("AnswerOid"),
AnswerContext = a.Field<String>("Answer"),
IsCorrect = a.Field<bool>("Correct")
}).ToList()
}).GroupBy(n=>n.Oid).ToList();
This will not return a flat collection. If I understand your structure correctly, this will return 7 Unique questions which have been joined to their answers. You can choose to flatten this collection by getting the first answer if you don't care about the others. You would append this to your GroupBy(n=>n.Oid) for:
GroupBy(n=>n.Oid).Select(g => g.First()).ToList();