Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WCF数据服务扩展为Linq语句_C#_Wcf_Linq_Wcf Data Services_Expand - Fatal编程技术网

C# WCF数据服务扩展为Linq语句

C# WCF数据服务扩展为Linq语句,c#,wcf,linq,wcf-data-services,expand,C#,Wcf,Linq,Wcf Data Services,Expand,目前,我正在尝试使用WCF数据服务。现在,我试图用Include语句查询我的服务中与EF(这是我的服务数据源)类似的一些对象,以获得objecttree 此时此刻,我的陈述如下: var query = this.Entities.Veranstaltung.Expand( "VeranstaltungMaterial/Material/Template" ).Expand( "Ort,Dozent" ); var k = query.Where( z => z.DauerTage &g

目前,我正在尝试使用WCF数据服务。现在,我试图用Include语句查询我的服务中与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,使其自动转换?

我想您的问题是:我是否可以通过常规LINQ语句而不是WCF DS特有的
Expand
语句来访问导航属性?如果是,答案是“是的,我们可以”

当然,我不能使用您的示例,但如果我连接到Northwind OData服务1,我可以:

Order_Details.Expand("Order/Customer").Expand("Product/Order_Details").Take (1)

不完全相同(而且几乎没有用处),但还可以

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



  • 格特的回答是正确的,只是想进一步说明(但无法将其纳入评论中): 您甚至可以使用Expand来表示第一个查询,只需使用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\u Details&$select=Orders/Order\u Details。

    m:n关系如何?使用LinQ,您可能会在第二个点进入一个集合。这不是一个技巧,但对于集合中的每个实体来说,这是到服务器的额外往返。我想避免这种情况:(不,这不是往返。WCF DS客户端LINQ提供程序从不将表达式转换为多个请求。如果不能在一个请求中转换,则转换将失败。您可以通过将上述表达式的结果存储在变量中并对其调用ToString进行验证。它将返回要执行的URL查询。
    Customers.Select(c =>
        new Customer
        {
            Orders = c.Orders.Select(o =>
                new Order
                {
                    Order_Details = o.Order_Details
                });
        });