【发布时间】: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