Данное руководство устарело. Актуальное руководство: Руководство по Entity Framework Core
Для объединения таблиц по определенному критерию используется метод Join. Например, в нашем случае таблица телефонов и таблица компаний имеет общий критерий - id компании, по которому можно провести объединение таблиц:
using(PhoneContext db = new PhoneContext()) { var phones = db.Phones.Join(db.Companies, // второй набор p => p.CompanyId, // свойство-селектор объекта из первого набора c => c.Id, // свойство-селектор объекта из второго набора (p, c) => new // результат { Name=p.Name, Company = c.Name, Price=p.Price }); foreach (var p in phones) Console.WriteLine("{0} ({1}) - {2}", p.Name, p.Company, p.Price); }
Метод Join принимает четыре параметра:
вторую таблицу, которая соединяется с текущей
свойство объекта - столбец из первой таблицы, по которому идет соединение
свойство объекта - столбец из второй таблицы, по которому идет соединение
новый объект, который получается в результате соединения
В итоге данный запрос будет транслироваться в следующее выражение SQL:
SELECT [Extent1].[Price] AS [Price], [Extent1].[Name] AS [Name], [Extent2].[Name] AS [Name1] FROM [dbo].[Phones] AS [Extent1] INNER JOIN [dbo].[Companies] AS [Extent2] ON [Extent1].[CompanyId] = [Extent2].[Id]
Аналогичного результата мы могли бы достигнуть, если бы использовали оператор join:
var phones = from p in db.Phones join c in db.Companies on p.CompanyId equals c.Id select new { Name=p.Name, Company = c.Name, Price=p.Price };
Допустим, у нас есть три таблицы, которые связаны между собой и которые описываются следующими моделями:
public class Country { public int Id { get; set; } public string Name { get; set; } } public class Company { public int Id { get; set; } public string Name { get; set; } public int CountryId { get; set; } public Country Country { get; set; } } public class Phone { public int Id { get; set; } public string Name { get; set; } public int Price { get; set; } public int CompanyId { get; set; } public Company Company { get; set; } }
Объединим три таблицы в один набор:
var result = from phone in db.Phones join company in db.Companies on phone.CompanyId equals company.Id join country in db.Countries on company.CountryId equals country.Id select new { Name = phone.Name, Company = company.Name, Price = phone.Price, Country = country.Name };