使用LINQ的OData如何指定导航属性

时间:2013-08-07 21:04:54

标签: c# linq odata

我希望LINQ准确生成这个URI:

http://<webservice>/MULTI_POINT_PARAMParameters(xcenter=1M,ycenter=1M)/Results 

xcenterycenter指定我的密钥,Results是包含我想要的数据的OData服务的导航属性。如果我在浏览器中键入此URI,我会得到我想要的结果。

几乎得到LINQ来生成这个,但我不能让它在结尾处做/ Results部分。所以,如果我这样做:

var query = context.MULTI_POINT_PARAMParameters
                   .Where(t => (t.xcenter == 1 && t.ycenter == 1))
                   .Select(t => t);   

我得到这样的URI:

http://<webservice>/MULTI_POINT_PARAMParameters(xcenter=1M,ycenter=1M)

这是一个开始,现在我只需要指定导航参数。我试过这个:

var query2 = context2.MULTI_POINT_PARAMParameters
                   .Where(t => (t.xcenter == 1 && t.ycenter == 1))
                   .Select(t => new { t.Results });  

但是,它生成的URI如下所示:

http://<webservice>/MULTI_POINT_PARAMParameters(xcenter=1M,ycenter=1M)?$expand=Results&$select=Results

read上面的URI应该与/Results相同但是对于我的特定服务我正在处理它不起作用,我需要生成的URI才能准确正如我在开始时用/Results写的那样。

有谁知道如何让LINQ做到这一点?

1 个答案:

答案 0 :(得分:0)

尝试SelectMany

var query2 = context2.MULTI_POINT_PARAMParameters
               .Where(t => (t.xcenter == 1 && t.ycenter == 1))
               .SelectMany(t => t.Results);  

对集合导航属性使用SelectMany,对单个导航属性使用Select