我正在尝试选择 empUID 等于某个 ID 的节点。这是我的 JSON 片段
{
"dsShedule": {
"ttEmployee": [
{
"empUID": 2649,
"empNameFirst": "Firstname",
"empNameLast": "lastName",
"empFunction": "AFWERKER DRUKKERIJ",
"ttShedule": [
{
"UID": 47,
"empUID": 2649,
"datStart": "2013-05-20",
"datStop": "2013-05-20",
"regime": 1,
"state": "PLANNED",
"ttSheduleDay": [
{
"SheduleUID": 47,
"dat": "2013-05-20",
"dateTimeStart": "2013-05-20T08:00:00.000",
"dateTimeStop": "2013-05-20T17:00:00.000",
"duration": 8
}
]
},
{
"UID": 57,
"empUID": 2649,
"datStart": "2013-05-21",
"datStop": "2013-05-21",
"regime": 1,
"state": "PLANNED",
"ttSheduleDay": [
{
"SheduleUID": 57,
"dat": "2013-05-21",
"dateTimeStart": "2013-05-21T08:00:00.000",
"dateTimeStop": "2013-05-21T17:00:00.000",
"duration": 8
}
]
}
]
},
我可以选择所有员工节点,但是当我尝试选择 ID 等于(例如 494323)的节点时,找不到它。
函数
JObject jObj = JObject.Parse(json);
int firstUID = 494323;
var linq = jObj["dsShedule"]["ttEmployee"].Select(x => new
{
empUID = x.SelectToken("empUID"),
empNameFirst = x.SelectToken("empNameFirst"),
empNameLast = x.SelectToken("empNameLast"),
ttShedule = x.SelectToken("ttShedule")
});
var uid = linq.Where(x => x.empUID.Equals(firstUID));
我正在使用 VS2012,当我调试元素 linq 并查找 empUID 的值时,它显示值 {494323} (为什么是括号?)。
下面是变量图片:
如您所见,uid 为空,我缺少什么?
提前致谢
最佳答案
您选择的不是选择查询中的值,而是 JToken 对象:
empUID = x.SelectToken("empUID")
empUID 的类型为 JToken(您可以在调试 View 中看到该类型)。 然后您尝试将整数与 JToken 进行比较,但会失败。
只需选择如下值:
empUID = x.SelectToken("empUID").Value<int>()
或者使用Value<T>
比较时:
var uid = linq.Where(x => x.empUID.Value<int>() == firstUID);
编辑
我不确定你到底想要什么,但这应该会给你一个想法。
- 使用给定的 empUID 过滤 ttEmployee 数组中的第一个条目
- 选择该条目的 ttShedule 数组
使用
Where
进行过滤所有 ttSchedule 条目,包含具有给定值 dat 属性的 ttSheduleDay:var linq = jObj["dsShedule"]["ttEmployee"] // first filter for a single emp by empUID .First(emp => emp["empUID"].Value<int>() == firstUID) // then select the ttShedule array of that emp .Select(emp => emp["ttShedule"]) // now filter for whatever ttShedule you need .Where(shed => shed["ttSheduleDay"] .Any(day => day["dat"].Value<DateTime>() == new DateTime(2013, 5, 24))
关于asp.net - JSON.net linq无法使用where语句选择节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16713932/