【发布时间】:2011-08-08 20:46:59
【问题描述】:
背景:
Linqpad 中的这个 LINQ 查询(或者在 VS2010 中)
EntityTypes.Where(x => x.EntityUrn == "http://foo")
转换为以下符合 oData 的 URI:
http://localhost/OData.svc/EntityTypes('http://foo') (这是因为 EntityUrn 是实体键...如果我的 Linq 查询指定了任何其他字段,则使用 $filter 语法)
问题在于,由于实体密钥中的字符受限,此 oData URI 返回错误(请参阅 blogs.msdn.com/b/peter_qian/archive/2010/05/25/using-wcf-data-service-with -restricted-characrters-as-keys.aspx)
所以我想做的是让这个 LINQ 查询自动转换为这个等效的 oData 兼容 URI:
http://localhost/OData.svc/EntityTypes?$filter=EntityUrn eq 'http://foo'
有什么建议吗?
【问题讨论】:
-
即使这样有效,您的 OData 服务也不符合标准。
-
#1 - 此请求如何违反 OData 标准? localhost/OData.svc/EntityTypes?$filter=EntityUrn eq 'foo' #2 - 真的可以操纵 LINQ>OData URI 转换逻辑吗?
-
#1:使用
$filter很好。但是您将不能够通过 ID 处理查询。 #2 我想你可以,但我不记得怎么做了。