【发布时间】:2014-07-02 19:35:36
【问题描述】:
我需要对 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 可以做到这一点,但我很难相信微软工具集无法做到这一点。
【问题讨论】:
-
尝试删除实体集“~/EntitySet?$filter=(par1 eq value1) and (par2 eq value2) and ... (parn eq valuen)”之后的括号。你的服务是用什么构建的?
-
删除括号从服务器返回相同的响应:方法'APPLICATIONDATA_GET_ENTITYSET'未在数据提供者类中实现它是SAP网关服务btw