Два оператора выполняют разные функции.
Первая может вернуть несколько записей.
Второй вернет только один CategoryID. Также будет выдано исключение, если хотя бы одна запись не найдена.
Следующий запрос будет эквивалентен вашему первому утверждению:
var categoryID = DataContext.Categories.Where(c => c.Name == name).CategoryID;
И следующий синтаксис запроса эквивалентен второму оператору:
var categoryID = (from c in DataContext.Categories
where c.Name == name
select c.CategoryID).Single();
В любом случае, согласованность, вероятно, является наиболее важной (производительность должна быть на одном уровне, так как они выполняются одинаково) Если вы используете синтаксис запроса, придерживайтесь его. Если вы начнете использовать лямбда-выражения , используйте их как можно чаще.