我想要完成的是在 ttSheduleDay 中选择 dateTimeStart。下面的 JSON 是一个员工的节点,该函数接收三个参数,一个 empUID、一个日期和一个值(开始/停止或持续时间)。
我要选择的节点是 dsShedule > ttEmployee > empUID 等于第一个参数,其中 ttShedule > ttSheduleDay > dat 等于日期参数,第三个参数我将使用 if 语句执行。JSON下面
JSON
{
"dsShedule": {
"ttEmployee": [
{
"empUID": 2649,
"empNameFirst": "firstname",
"empNameLast": "lastname",
"empFunction": "employee",
"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
}
]
}
]
},
我已经拥有的代码是选择 ttShedule
JObject jObj = JObject.Parse(json);
var linq = jObj["dsShedule"]["ttEmployee"]
// first filter for a single emp by empUID
.First(emp => emp["empUID"].Value<int>() == Convert.ToInt16(empUID))
.SelectToken("ttShedule");
Stackoverflow 上有人建议的代码是:
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))
但这在 ttShedule 的 select 语句上失败了。我想知道如何扩展我的代码以使用第二个 if 语句选择 dateTimeStart 节点。
提前致谢