好的,我有一个JSON对象叫做“故障”
"Faults":[{"RoomId":1,"ElementId":173,"FaultTypeId":1,"Count":1,"Remark":""},{"RoomId":3,"ElementId":211,"FaultTypeId":7,"Count":1,"Remark":""},{"RoomId":4,"ElementId":173,"FaultTypeId":1,"Count":1,"Remark":""}]在调试器中显示的故障对象:

现在我需要通过使用he RoomId来检查房间是否有故障。我使用的代码是:
Enumerable.From(audit.Rooms).ForEach(function(room, index) {//√
var containsFaults = '';
//room.Id is ALWAYS filled, it can't be null
var test1 = faults.Select("$.RoomId==" + room.Id).Count();
var test2 = faults.Select("$.RoomId==" + room.Id);
if (faults.Select("$.RoomId==" + room.Id).Count() > 0) {
containsFaults = '√';
}但当我执行这段代码时,我得到以下结果.

为什么不直接用匹配的RoomId返回我的对象的错误呢?我肯定身份证是吻合的。我在这里做错了什么,我真的被困在这里了.
提前感谢!
发布于 2017-01-18 14:38:53
回答这个问题
为什么不直接用匹配的RoomId返回我的对象的错误呢?我肯定身份证是吻合的。我在这里做错了什么,我真的被困在这里了.
您需要添加.ToArray()来呈现结果。
var test2 = faults.Select("$.RoomId==" + room.Id).ToArray();
// ^^^^^^^^^^
var audit = { Faults: [{ RoomId: 42, ElementId: 4711, FaultTypeId: 0, Count: 0, Remark: "no fault" }, { RoomId: 1, ElementId: 173, FaultTypeId: 1, Count: 1, Remark: "" }, { RoomId: 3, ElementId: 211, FaultTypeId: 7, Count: 1, Remark: "" }, { RoomId: 4, ElementId: 173, FaultTypeId: 1, Count: 1, Remark: "" }] },
roomId = 4,
dataset = Enumerable.From(audit.Faults),
test1 = dataset.Where("$.Count > 0 && $.RoomId==" + roomId).Count();
test2 = dataset.Where("$.Count > 0 && $.RoomId==" + roomId).ToArray();
console.log(test1);
console.log(test2);<script src="https://cdnjs.cloudflare.com/ajax/libs/linq.js/2.2.0.2/linq.js"></script>
https://stackoverflow.com/questions/41721889
复制相似问题