LINQ лямбды и запросы C#. Тонкости LINQ

Я слышал что помимо стандартных лямбда-выражений в LINQ также используются какие-то запросы, которые имеют отличный от лямбд синтаксис. Что это за запросы? И вообще, просвятите просвятите пожалуйста про какие-то тонкости технологии LINQ, чему "не научат в универе".

Лямбда запросы в Linq напоминают обыкновенные запросы на языке SQL к базе данных. Вот вам пример:

Это лямбда выражение в Linq

string[] people = new [] { "Tom", "Dick", "Harry" };
var filteredPeople = people.Where (p => p.Length > 3); 

А это - аналогичный Linq запрос

string[] people = new [] { "Tom", "Dick", "Harry" };
var filteredPeople = from p in people where p.Length > 3 select p; 

Не знаю, можно ли это отнести к тонкостям самого Linq, но я, за время пользования технологией, обнаружил следующее:

1. Присутствие как лямбда выражений так и SQL запросов в контексте технологии Linq. Как по мне, то это очень даже интересно.

2. Для того что бы вывести все элементы в таблице, можно ограничиться этим:

 db.Mydb

вместо этого:

from c in db.Mydb select c 

3. Не нужно пытаться "думать на SQL". Если вы используете Linq, то и думать нужно "на Linq". Чем больше вы пытаетесь подражать SQL - тем больше конфликтов с Api вы получите.

4. Работая с локальными коллекциями для присоединения коллекций нужно использовать join, но нельзя сказать то же самое про работу с базами данных. Операция соединения может быть заменена использованием нескольких from-ов и подзапросов.