从OData - net返回一个实体

本文关键字:一个 实体 OData net 返回 | 更新日期: 2023-09-27 18:10:55

我需要在OData服务上做一个请求,该请求将检索单个实体,并且应该看起来像这样:/EntitySet (par1 = value1,…,parn =家)

然而,我的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在这里。然而,这是一个同步调用。关于如何使它异步的任何想法?

Update2:似乎我想要实现的是一个OData复合键查找。有这个OData库可以做到这一点,但我发现很难相信这不能用微软的工具集完成。

从OData - net返回一个实体

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

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