В качестве первого шага, я бы определенно рекомендовал прочитать превосходное Скотта Гатри, использующее учебник Linq-to-SQL , состоящий из нескольких частей. Он охватывает многие из этих основ Linq-to-SQL.
Также посмотрите Hooked на LINQ 5-минутный обзор - как там упоминалось, часто в Linq-to-SQL, вам даже не нужно самому выражать JOINs - LINQ-to-SQL обрабатывает многие из них напрямую, предоставляя ссылки на сущности и ссылки на наборы сущностей.
Если вы затем решите, что вы действительно ДОЛЖНЫ использовать явное СОЕДИНЕНИЕ, Билал Хайдар прекрасно покажет, как сделать явное ВЛЕВОЕ СОЕДИНЕНИЕ * В своем сообщении в блоге.
«Нормальный» случай ВНУТРЕННЕГО СОЕДИНЕНИЯ относительно прост - вы просто добавляете
from c in customers
join o in orders on o.customerid equals c.customerid
к вашему запросу.
Что касается выбора отдельных полей - см. Вступительную статью Скотта Гатри - он объясняет это очень подробно!
По сути, вы можете сделать одну из трех вещей:
- выберите целую сущность (например, клиента) и получите всю информацию для нее
- выбрать некоторые поля в новый существующий тип (например, тип "CustomerOrder")
- выделить несколько полей в новый анонимный тип
Это выберет всех клиентов, у которых есть заказ:
from c in customers
join o in orders on o.customerid equals c.customerid
select c;
Это позволит выбрать всех клиентов и заказы в новый тип "CustomerOrder", который уже существует в вашем проекте:
from c in customers
join o in orders on o.customerid equals c.customerid
select new CustomerOrder { CustomerName = c.Name,
CustomerID = c.CustomerId,
OrderDate = o.OrderDate, ...... } ;
Это позволит выбрать идентификатор клиента и дату заказа в новый анонимный тип для использования:
from c in customers
join o in orders on o.customerid equals c.customerid
select new { CustomerID = c.CustomerId, OrderDate = o.OrderDate } ;
Это сильный тип - и за этим стоит полноценный тип .NET CLR - вы просто не знаете его имени :-) Но вы можете использовать эти элементы в коде, вы получите Intellisense и все - отлично для быстрого временного манипулирования некоторыми данными.
Марк