【问题标题】:WCF Data Services Expand as Linq StatementWCF 数据服务扩展为 Linq 语句
【发布时间】:2012-09-15 15:07:23
【问题描述】:

目前我正在尝试使用 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 以便自动翻译?

【问题讨论】:

    标签: c# wcf linq wcf-data-services expand


    【解决方案1】:

    格特的回答是正确的,只是想对其进行扩展(并且无法将其放入评论中): 您甚至可以使用 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。

    【讨论】:

    • 这不是一个技巧,但它是集合中每个实体到服务器的额外往返。我想完全避免这种情况:(
    • 不,这不是往返。 WCF DS 客户端 LINQ 提供程序从不将表达式转换为多个请求。如果它不能在一个请求中完成,它将导致翻译失败。您可以通过将上述表达式的结果存储在变量中并在其上调用 ToString 来进行验证。它将返回您要执行的 URL 查询。
    【解决方案2】:

    我想您的问题是:我可以通过常规 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/

    【讨论】:

    • m:n 关系呢?使用 LinQ,您可能会在第二个点处出现 Collection。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 2012-12-13
    • 2013-07-25
    相关资源
    最近更新 更多