如何编写从Join?
返回分层匿名类型的LINQ查询澄清我的意思: 使用WCF数据服务和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
}
加入有效。 如何“选择”具有Customer和Orders属性的所有属性的匿名类型, 类似于数据服务返回的内容,它直接绑定到网格?
类似的东西(这是不支持的语法!): 选择New With {c。*, 。订单= o }
答案 0 :(得分: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语法错误提前道歉。
对于一项服务:
It's almost always a mistake to use join
in LINQ to Entities or 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不是我的强项。