Entityframework Присоединиться с помощью метода join и lambdas
Кажется, существуют разные способы соединения с использованием linq. Один из них более прост и включает в себя просто соединение таблиц следующим образом:
var found = from c in s.categories
join cm in s.categorymaps on c.CategoryId equals cm.ChildCategoryId
select c;
Есть другой способ использования lambdas, и у меня есть чертовски время, пытаясь понять, как присоединиться, используя этот синтаксис. Может ли кто-нибудь предоставить ссылки на подробные объяснения и множество примеров? Или просто продемонстрируйте, используя примеры, как использовать этот довольно запутанный синтаксис?
var x = _session.All<category>().Join<categorymap,category, ....
Ответы
Ответ 1
Обычно я предпочитаю синтаксис лямбда с LINQ, но Join
- это один из примеров, когда я предпочитаю синтаксис запроса - чисто для удобочитаемости.
Тем не менее, вот эквивалент вашего вышеуказанного запроса (я думаю, непроверенный):
var query = db.Categories // source
.Join(db.CategoryMaps, // target
c => c.CategoryId, // FK
cm => cm.ChildCategoryId, // PK
(c, cm) => new { Category = c, CategoryMaps = cm }) // project result
.Select(x => x.Category); // select result
Возможно, вам придется поиграть с проекцией в зависимости от того, что вы хотите вернуть, но в том, что ее суть.
Ответ 2
Вы можете найти несколько примеров здесь:
// Fill the DataSet.
DataSet ds = new DataSet();
ds.Locale = CultureInfo.InvariantCulture;
FillDataSet(ds);
DataTable contacts = ds.Tables["Contact"];
DataTable orders = ds.Tables["SalesOrderHeader"];
var query =
contacts.AsEnumerable().Join(orders.AsEnumerable(),
order => order.Field<Int32>("ContactID"),
contact => contact.Field<Int32>("ContactID"),
(contact, order) => new
{
ContactID = contact.Field<Int32>("ContactID"),
SalesOrderID = order.Field<Int32>("SalesOrderID"),
FirstName = contact.Field<string>("FirstName"),
Lastname = contact.Field<string>("Lastname"),
TotalDue = order.Field<decimal>("TotalDue")
});
foreach (var contact_order in query)
{
Console.WriteLine("ContactID: {0} "
+ "SalesOrderID: {1} "
+ "FirstName: {2} "
+ "Lastname: {3} "
+ "TotalDue: {4}",
contact_order.ContactID,
contact_order.SalesOrderID,
contact_order.FirstName,
contact_order.Lastname,
contact_order.TotalDue);
}
Или просто Google для синтаксиса метода linq join.