从 OData 返回单个实体 - .Net

ano*_*stu 5 .net c# linq odata

我需要对 OData 服务执行一个请求,该请求将检索单个实体,该请求应如下所示:\n /EntitySet(par1=value1,\xe2\x80\xa6,parn=valuen)

\n\n

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

\n\n

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

\n\n

有什么我可以做的吗?手动创建查询 URL 会很遗憾...

\n\n

这是代码:

\n\n
        var context = new CHART_SRV_Entities(oDataUri);\n\n        var query = context.ApplicationData.Where(ad =>\n            ad.institution == "1" &&\n            ad.patientId == "2000118" &&\n            ad.caseId == "2488");\n\n        DataServiceCollection<ApplicationData> data = new DataServiceCollection<ApplicationData>(context);\n\n        data.LoadCompleted += (s, args) =>\n            {\n                if (args.Error == null)\n                {\n                    if (data.Continuation != null)\n                    {\n                        data.LoadNextPartialSetAsync();\n                    }\n                    else\n                    {\n                        var result = data;\n                    }\n                }\n                else\n                {\n                    MessageBox.Show(args.Error.Message);\n                }\n            };\n\n        data.LoadAsync(query);\n
Run Code Online (Sandbox Code Playgroud)\n\n

更新: “括号请求”是通过 CreateQuery 实现。然而,这是一个同步调用。关于如何使其异步的任何想法?

\n\n

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

\n

小智 2

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

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