programing

조인 방법과 람다를 사용하여 EntityFramework 조인

projobs 2021. 1. 17. 10:23
반응형

조인 방법과 람다를 사용하여 EntityFramework 조인


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, ....

일반적으로 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

반환하려는 항목에 따라 프로젝션을 조작해야 할 수도 있지만 그게 요령입니다.


여기 에서 몇 가지 예를 찾을 수 있습니다 .

// 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);
}

Or just google for 'linq join method syntax'.

ReferenceURL : https://stackoverflow.com/questions/5010110/entityframework-join-using-join-method-and-lambdas

반응형