it-swarm-ru.tech

Присоединение Entityframe с использованием метода join и лямбда-выражений

Кажется, есть разные способы сделать соединения, используя 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, ....
53
Mason

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

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

138
RPM1984

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

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

13
Jakub Konecki