Присоединение Entityframe с использованием метода join и лямбда-выражений - PullRequest
53 голосов
/ 16 февраля 2011

Похоже, есть разные способы объединения с использованием linq. Одна из них более проста и включает в себя простое объединение таблиц:

var found = from c in s.categories
            join cm in s.categorymaps on c.CategoryId equals cm.ChildCategoryId
            select c;

Есть еще один способ использования лямбд, и я трачу время, пытаясь выяснить, как присоединиться, используя этот синтаксис. Может ли кто-нибудь предоставить ссылки на подробные объяснения и множество примеров? Или просто продемонстрируйте на примерах, как использовать этот довольно запутанный синтаксис?

var x = _session.All<category>().Join<categorymap,category, ....

Ответы [ 2 ]

138 голосов
/ 16 февраля 2011

Обычно я предпочитаю лямбда-синтаксис с 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

Возможно, вам придется поиграть с проекцией в зависимости от того, что вы хотите вернуть, но в этом суть.

13 голосов
/ 16 февраля 2011

Вы можете найти несколько примеров здесь :

// 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'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...