Основное отличие состоит в том, что, как вы говорите, запросы LINQ to SQL преобразуются в SQL. Это означает, что есть код, который вы можете написать, который на самом деле не является конвертируемым или имеет слегка различную семантику - и вы узнаете это только во время выполнения.
Например:
var query = from person in people
where person.Age == person.GetHashCode()
select person;
будет хорошо скомпилироваться , но потерпит неудачу во время выполнения, потому что LINQ to SQL не знает, что делать с GetHashCode()
.
По сути, я нахожу, что LINQ to SQL гораздо сложнее предсказать, чем LINQ to Objects. Это не значит, что это бесполезно - это просто немного другой мир. MS проделала потрясающую работу, позволив вам писать запросы, которые очень часто просто делают то, что вы ожидаете, но не могут делать все.