私が達成しようとしているのは、ttSheduleDay 内で dateTimeStart を選択することです。その下の JSON は 1 人の従業員のノードです。この関数は、empUID、日付、および (開始/停止または期間) の値の 3 つのパラメーターを受け取ります。
選択したいノードは、dsShedule > ttEmployee > empUID が最初のパラメーターに等しい場所です。ここで、ttShedule > ttSheduleDay > dat は日付パラメーターに等しく、3 番目のパラメーターは 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 ステートメントで失敗しました。コードを拡張して、2 番目の if ステートメントで dateTimeStart ノードを選択する方法を考えていました。
前もって感謝します