/ / Как да се върне йерархичен анонимен тип от LINQ Join? - linq-to-entity

Как да върнете йерархичния анонимен тип от LINQ Join? - linq-to-entities

Как мога да напиша LINQ заявка, която връща йерархичен анонимен тип от Присъедини?

За да изясня какво имам предвид: С WCF Data Services и Telerik WPF RadTreeView лесно можете да зададете и да покажете йерархични данни:

    Dim q = _ctx1.Execute(Of NorthwindDataService.Customers)(New Uri("Customers?$expand=Orders", UriKind.Relative))
Dim td As New GridViewTableDefinition
td.Relation = New Telerik.Windows.Data.PropertyRelation("Orders")
RadGridView1.ChildTableDefinitions.Add(td)
Dim r = q.ToList
RadGridView1.ItemsSource = r

Искам да се присъединя към обекти от различни услуги за данни и да ги покажа в йерархична мрежа.

Dim q = From c In _ctx1.Customers.ToList
Join o In _ctx2.Orders.ToList On c.CustomerID Equals o.CustomerID
Select New With {c.CustomerID,
o.OrderId
}

Присъединява се. Как мога да "избера" анонимен тип с всички свойства на Клиента плюс собственост за Поръчки, аналогично на това, което услуга за данни се връща, което директно се свързва с мрежата?

Нещо като (това не се поддържа синтаксис!): Изберете Нов с {c. *, .Orders = o }

Отговори:

1 за отговор № 1

За две различни услуги за данни можете да използвате LINQ to Objects:

Dim q1 = _ctx1.Customers.AsEnumerable()
Dim q2 = _ctx2.Orders.ToList()

Dim q = From c in q1
Select New With {c.CustomerID,
q2.Where(o => o.CustomerID == c.CustomerID)
}

Отново се извинявам предварително за синтактичните грешки на VB.NET от моя страна.

За една услуга:

Почти винаги е грешка да се използва join в LINQ до Entities или LINQ към SQL.

Директната аналогия с заявката за услуги за данни е:

Dim q = _ctx1.Customers.Include("Orders");

Но можете също да проектирате както с вашия L2E пример:

Dim q = From c In _ctx1.Customers.ToList
Select New With { c.CustomerID,
From o in c.Orders Select o.OrderID}

Извинявайте се предварително за синтактични грешки; VB.NET не е моята сила.