目前我正在尝试使用WCF数据服务。现在我试图通过Include语句向我的Servie查询类似于EF(这是我的服务的数据源)的一些对象,以获得一个objecttree。
我的陈述现在看起来像这样:
var query = this.Entities.Veranstaltung.Expand( "VeranstaltungMaterial/Material/Template" ).Expand( "Ort,Dozent" );
var k = query.Where( z => z.DauerTage > 5 && z.TemplateID == null );
是否可以通过LINQ编写Expandstatement,以便自动翻译?
答案 0 :(得分:1)
我想您的问题是:我是否可以通过常规linq语句来获取导航属性,而不是特定于WCF-DS的Expand
语句?如果是这样,答案是"是的,我们可以"。
当然我无法使用您的示例,但如果我连接到Northwind OData服务 1 ,我可以这样做:
Order_Details.Expand("Order/Customer").Expand("Product/Order_Details").Take (1)
或
Order_Details.Take(1).Select(o =>
new { o.Order.Customer, o.Product.Order_Details })
不完全等同(并且几乎没用),但还可以。
在网址中,您会看到第二个语句也被翻译为expand
。
答案 1 :(得分:1)
Gert的回答是正确的,只是想扩展它(并且不能将其纳入评论): 您甚至可以使用“使用LINQ扩展”来表达第一个查询:
Order_Details.Take(1).Select(od =>
new Order_Detail
{
Order = new Order
{
Customer = od.Order.Customer
},
Product = new Product
{
Order_Details = od.Product.Order_Details
},
});
您可以使用m:n关系执行类似的操作。该样本遵循1:n关系,但方向相反:
Customers.Select(c =>
new Customer
{
Orders = c.Orders.Select(o =>
new Order
{
Order_Details = o.Order_Details
});
});
这相当于〜/ Customers?$ expand = Orders / Order_Details& $ select = Orders / Order_Details。