我需要在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可以做到这一点,但我发现很难相信这不能用微软的工具集完成.
最佳答案 在实体集名称后,只允许在括号中显示关键属性.
如果您使用非键属性来查找条目,则必须使用过滤器.这就是客户端的工作方式,也是正确的行为.
在您的情况下,如果可以,我建议您自定义客户端代码或更新服务代码以支持过滤器.