【问题标题】:How do I filter using Odata from dynamic data nested in a list?如何使用 Odata 从嵌套在列表中的动态数据中进行过滤?
【发布时间】:2015-07-10 15:17:20
【问题描述】:

json文件示例

{
    "ProjectName": "14010-00 General Expenses",
    "ClientName": "Whiting",
    "Created": "2015-06-26T21:06:17.721Z",
    "Data": {
      "function": "LIT",
      "tag": "1461",
      "rack": "1",
      "slot": "4",
      "channel": "1"
    }
},
{
    "ProjectName": "104021-00 CPF",
    "ClientName": "Bonanza Creek",
    "Created": "2015-06-26T21:03:20.732Z",
    "Data": {
      "tag": "200",
      "function": "FT",
      "basemodel": "FT-200",
      "shortdescription": ""
    }
}

我想根据 Data 的内容进行过滤,但是这在不同组件之间差异很大。所以Component.cs文件拥有

public class Component{
    public string ClientName{get; set;}
    public string ProjectName{get; set;}
    ...
    public IDictionary<string, object> Data { get; set; }
}

问题可能出在字典由字符串、对象而不是字符串、字符串组成,但无论如何,大多数(如果不是全部)数据值都是字符串。

所以一个

~/component?$filter=ClientName eq 'Whitning'

会起作用;但是,查询失败

~/component?$filter=Data/function eq 'FT'

并给出错误响应 “属性'function'的属性访问的父值不是单个值。属性访问只能应用于单个值。”并尝试

~/component?$filter=Data/any(d: d/function eq 'FT')

给出错误响应 “在类型 'System.Collections.Generic.KeyValuePair_2OfString_Object' 上找不到名为 'function' 的属性。”

那么我该如何过滤 Data 对象中动态创建但并不总是存在的对象呢?

【问题讨论】:

  • 我建议您使用 LinqPad 使用 OData 作为数据源并对您的对象使用 linq 查询,这将自动在 URL 中生成应用的过滤器作为输出。

标签: c# json dynamic filter odata


【解决方案1】:

您使用的是 Web API OData 吗?如果是,Data 只是动态属性的容器。它不应该出现在有效载荷中。所以你的有效载荷应该是:

{
    "Id": "558dbec9940bc716801a95d4",
    "FacilityName": "Ray",
    "ProjectName": "14010-00 General Expenses",
    "ClientName": "Whiting",
    "ProjectNames": [],
    "Name": "IoList",
    "Created": "2015-06-26T21:06:17.721Z",
    "Updated": "2015-06-26T21:06:17.721Z",
    "function": "LIT",
    "tag": "1461",
    "rack": "1",
    "slot": "4",
    "channel": "1"
},{ ...

【讨论】:

  • 但是它没有办法与仍然存在的数据容器一起工作吗?
  • 数据容器?你是说odata客户端吗?
  • 不,我的意思是包含函数、标签、机架等的数据对象。
  • 好的。我认为您可以为“数据”属性创建一个开放的复杂类型以满足您的要求。
猜你喜欢
  • 2021-01-14
  • 2022-11-01
  • 1970-01-01
  • 2020-06-01
  • 2023-03-19
  • 2020-10-25
  • 2018-08-12
  • 2014-01-23
  • 2014-07-26
相关资源
最近更新 更多