Asp.net JSON.net linq无法使用where语句选择节点
我正在尝试选择empUID等于某个ID的节点Asp.net JSON.net linq无法使用where语句选择节点,asp.net,json,linq,json.net,Asp.net,Json,Linq,Json.net,我正在尝试选择empUID等于某个ID的节点 { "dsShedule": { "ttEmployee": [ { "empUID": 2649, "empNameFirst": "Firstname", "empNameLast": "lastName", "empFunction": "AFWERKER DRUKKER
{
"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
}
]
}
]
},
我可以选择所有employee节点,但当我尝试选择ID等于(例如494323)的节点时,找不到它
功能
我正在使用VS2012,当我调试元素linq并查找empUID的值时,它会显示值{494323}(为什么是括号?)
下面是变量的图片:
你可以看到uid是空的,我缺少什么
提前感谢您选择的不是select查询中的值,而是JToken对象:
empUID = x.SelectToken("empUID")
empUID的类型为JToken(您可以在debug视图中看到该类型)。
然后尝试将一个整数与一个将失败的JToken进行比较
只需选择如下值:
empUID = x.SelectToken("empUID").Value<int>()
谢谢,这正是我需要的,不客气。请随意接受和/或投票支持我的答案。变量UID现在是employee。现在我想从变量UID中选择ttschedule下的“datStart”。如何选择此选项?此时它就像一个IEnumerablelist,不知道如何处理它。
ttschedule
是一个数组。您想获取所有的datStart
值还是第一个、最后一个,…我要完成的是选择TTScheduleDay dateTimeStart。但这里empUID等于'a ID',ttscheduleday>dat等于日期。然后我得到了第三个参数Start/Stop或duration,这将决定我将选择哪个节点。我该怎么做?Thx 4应答
empUID = x.SelectToken("empUID").Value<int>()
var uid = linq.Where(x => x.empUID.Value<int>() == firstUID);
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))