0

目前我正在尝试使用 WCF 数据服务。现在我正在尝试使用 Include 语句查询我的 Servie 以获取类似于 EF 的一些对象(这是我的 Service 的数据源),以获取对象树。

我的陈述此时看起来像这样:

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 以便自动翻译?

4

2 回答 2

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

不完全等效(并且几乎没有用),但是可以。

在 URL 中,您会看到第二条语句也被翻译成expand


  1. http://services.odata.org/V3/Northwind/Northwind.svc/
于 2012-09-15T19:20:34.957 回答
1

Gert 的回答是正确的,只是想对其进行扩展(并且不能将其放入评论中):您甚至可以使用 LINQ 使用 Expand 来表达第一个查询:

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。

于 2012-09-16T11:21:15.173 回答