OData:使用select的过滤器提供不一致的结果

时间:2018-03-26 20:33:50

标签: c# asp.net-web-api odata

我有以下结构。

Product
{
    GUID ID
    string Name
    GUID Category
    decimal Cost
    bool IsActive
}

在我的配置中,我已将ID注册为主键。 我正在尝试创建一个简单的Get端点,用于检索Products中的所有数据。 在大多数情况下,端点本身可以​​正常工作。

  • 作品 - /产品
  • 作品 - / Products /?$ filter = IsActive eq true

  • 作品 - / Products /?$ filter = ID eq {some guid}

虽然上面是相当直接的并且按预期工作,但当我尝试将过滤器与select混合时,它似乎提供了不一致的结果。

  • 有效结果 - / Products /?$ filter = IsActive eq true和ID eq {some GUID}&安培; $选择=名称,IsActive
  • 空结果 - / Products /?$ filter = IsActive eq true和ID eq {some GUID}&安培; $选择=名称
  • 空结果 - / Products /?$ filter = ID eq {some guid}和IsActive eq 真安培; $选择=名称
  • 有效结果 - / Products /?$ filter = IsActive eq true& $ select = Name,IsActive
  • 空结果 - / Products /?$ filter = IsActive eq true& $ select = Name
  • 空结果 - / Products /?$ filter = IsActive eq true和Cost ne null& $ select = IsActive

如果是'或'我在下面找到了结果。请注意,我的测试数据集中没有值为空。

  • 有效结果 - / Products /?$ filter =类别ne null或名称eq'测试产品& $ select =成本,名称
  • 有效结果 - / Products /?$ filter =类别eq null或名称eq'测试产品& $ select =成本(我已从某些数据中删除了类别)
  • 空结果 - / Products /?$ filter =类别ne null或名称ne'测试产品& $ select =成本,名称
  • 空结果 - / Products /?$ filter =类别ne null或名称eq'测试产品& $ select = Cost

请注意,我已经编写了自己的SQL,并且我已经验证了这会按预期生成正确的数据集,但oData似乎正在对响应对象进行一些处理。 当我说不起作用时,我的意思是它只是给我一个空集合,而不是给我相关的值。

对于我的设置,我使用的是带有所有最新依赖项的oData V4。

Microsoft.ASPNet.OData - 6.1.0

Microsoft.Data.Edm / Core / Spatial - 7.4.3

有人可以解释为什么上面的过滤器以不同的方式表现吗?

其他详细信息

当我查看我返回的响应对象时,它包含20个奇数元素。

OK(response)

我创建了一个覆盖OnActionExecuted的属性,其中context.Response.Content为null,而不是包含这20个元素。

元数据

<EntityType Name="Products">
    <Key>
        <PropertyRef Name="ID" />
    </Key>
    <Property Name="ID" Type="Edm.Guid" Nullable="false" />
    <Property Name="Name" Type="Edm.String" />
    <Property Name="IsActive" Type="Edm.Boolean" />
    <Property Name="Category" Type="Edm.Guid" />
    <Property Name="Cost" Type="Edm.Decimal" />
</EntityType>

0 个答案:

没有答案