SingleOrDefault означает «если нет элементов, дайте мне значение по умолчанию, если он есть, дайте мне его, иначе выведите исключение» FirstOrDefault означает «если элементов нет, тогда укажите значение по умолчанию, в противном случае укажите первый».
Что касается вашего вопроса о комбинировании запросов - почему бы вам? Если код работает хорошо, как написано, зачем его менять?
Чтобы ответить на вопрос, который вы не задавали: обычный способ объединения запросов - это использование продолжения запроса . Общий шаблон:
var q1 = from y in something
somequeryclauses;
var q2 = from x in q1
someotherquerqyclauses;
Вы могли бы написать это как один большой запрос, подобный этому:
var q2 = from x in (from y in something
somequeryclauses)
someotherqueryclauses;
который трудно читать. Вы можете объединить два запроса с продолжением запроса:
var q2 = from y in something
somequeryclauses
into x
someotherqueryclauses;
Имеет смысл?