首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在带有角FilterDescriptor的kendo的odata查询字符串中生成枚举比较

如何在带有角FilterDescriptor的kendo的odata查询字符串中生成枚举比较
EN

Stack Overflow用户
提问于 2017-07-11 17:17:31
回答 1查看 1.4K关注 0票数 0

我有一个接受OData http查询的ASP WebApi odata v6项目。

是否有一种方法可以使用kendo角ui FilterDescriptor来执行相等(eq)操作来匹配枚举?我的目标是填充一个状态,它将与toODataString方法一起使用。

问题是,OData规范要求枚举必须完全合格。

例如:

SomeField eq My.Fully.量化的‘’EnumValue‘

(请注意,单引号仅放在Enum的实际值周围)

但是,我无法找到一种方法来描述输入到筛选描述符中的值不是作为字符串处理,而是作为枚举来处理。

过滤器描述符如下所示:

代码语言:javascript
运行
复制
const myFilterDescriptor = <FilterDescriptor> {
    field:'SomeField',
    operator:'eq',
    value:'My.Fully.Quallified.EnumValue'
};

毫不奇怪,此FilterDescriptor将生成以下不正确的odata文本:

SomeField eq 'My.Fully.Quallified.EnumValue‘

(单引号放错位置)

另一种可能是去掉odata段的enum文本部分。我的意思是,如果不将文本传递给FilterDescriptor值,我只需传递枚举数值,问题就会消失。

即:

代码语言:javascript
运行
复制
const myFilterDescriptor = <FilterDescriptor> {
    field:'SomeField',
    operator:'eq',
    value:123
};

默认的web odata HttpConfiguration似乎不允许这样做。我发现提出使用EnableEnumPrefixFree以下问题似乎已经消失了,就像web v6一样。与另一个问题相关的WebApi odata v6建议了一个自定义实现,以模仿EnableEnumPrefixFree,而我并没有做到这一点。

因此,总而言之,如何能够轻松地在带有角FilterDescriptor ?的kendo用户界面的odata查询字符串中生成枚举比较。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-12 07:01:40

让它像描述的这里这里那样工作:

代码语言:javascript
运行
复制
config.MapODataServiceRoute(
    "odata",
    "odata",
    builder =>
      builder.AddService(ServiceLifetime.Singleton, sp => GetEdmModel())
            .AddService<IEnumerable<IODataRoutingConvention>>(ServiceLifetime.Singleton, sp =>
                            ODataRoutingConventions.CreateDefaultWithAttributeRouting("odata", config))
            .AddService<ODataUriResolver>(ServiceLifetime.Singleton, sp => new StringAsEnumResolver()));

诀窍是在配置中手动注册StringAsEnumResolver服务。这是从版本6( WebApi )开始配置WebApi odata层的方法,而不是以前的配置方法(如EnableEnumPrefixFree)。

因此,下面的odata比较现在起作用了:

SomeField eq 'EnumValue‘

(请注意,使用数值(如SomeField eq 123 )不起作用)

因此,可以这样使用FilterDescripror:

代码语言:javascript
运行
复制
const myFilterDescriptor = <FilterDescriptor> {
    field:'SomeField',
    operator:'eq',
    value:'EnumValue'
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45040890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档