Как вернуть иерархический анонимный тип из LINQ Join? - PullRequest
1 голос
/ 08 марта 2010

Как мне написать запрос 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 голос
/ 08 марта 2010

Для двух разных служб данных вы можете использовать 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 to Entities или LINQ to SQ L.

Прямая аналогия с запросом на услуги передачи данных:

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 не моя сильная сторона.

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