从OData返回单个实体 - .Net

时间:2014-07-01 15:54:01

标签: c# .net linq odata

我需要在OData服务上执行请求,该服务将检索单个实体,并且应该如下所示: /EntitySet(par1=value1,…,parn=valuen)

但是,我的LINQ生成的用于获取条目的查询如下所示: /EntitySet()?$filter=(par1 eq value1) and (par2 eq value2) and ... (parn eq valuen)

这当然是有效的。但是服务器不允许它。它只与第一个选项一致,即括号中的标准。

我能做些什么吗?手动创建查询URL ...

是一种耻辱

以下是代码:

        var context = new CHART_SRV_Entities(oDataUri);

        var query = context.ApplicationData.Where(ad =>
            ad.institution == "1" &&
            ad.patientId == "2000118" &&
            ad.caseId == "2488");

        DataServiceCollection<ApplicationData> data = new DataServiceCollection<ApplicationData>(context);

        data.LoadCompleted += (s, args) =>
            {
                if (args.Error == null)
                {
                    if (data.Continuation != null)
                    {
                        data.LoadNextPartialSetAsync();
                    }
                    else
                    {
                        var result = data;
                    }
                }
                else
                {
                    MessageBox.Show(args.Error.Message);
                }
            };

        data.LoadAsync(query);

更新:使用CreateQuery here实现了“括号请求”。但是,那是同步通话。关于如何使其异步的任何想法?

Update2:似乎我正在尝试实现的是OData复合键查找。有OData library可以做到这一点,但我发现很难相信使用Microsoft工具集无法做到这一点。

1 个答案:

答案 0 :(得分:2)

在实体集名称后,只允许在括号中显示关键属性。 如果您使用非键属性来查找条目,则必须使用过滤器。这就是客户端的工作方式,也是正确的行为。

在您的情况下,如果可以的话,我建议您自定义客户端代码或更新服务代码以支持过滤器。