2017-01-18 12 views
1

わかりましたので、私は、デバッガに示す「障害」linq.js予期しない結果

"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":""}] 

障害物と呼ばれるこのJSONオブジェクトを持っている:

faults shown in debugger

は、今私がいるかどうかを確認する必要があります部屋には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 = '√'; 
    } 

しかし、私は以下の結果を得て、このコードイムを実行しています...

result printscreen

それだけで戻りませんなぜ私のオブジェクトからの不一致はRoomIdと一致していますか?私はイドがマッチすると確信しています。私はここで間違って何をしているのですか?私は本当にこれにつかまっています...

ありがとうございます!

+0

、どのように結果のようになりますか? 'RoomId'の配列のみ? –

+0

私はちょうど部屋ごとの欠陥の量をしたい、申し訳ありません私は不明だった場合 – Basvo

答えて

1

質問に答えるために

はなぜそれだけで障害者の私のオブジェクトからのマッチング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>

+0

この詳細なお答えいただきありがとうございます!しかし、私はちょうど現在の部屋に欠陥があるかどうかを知りたい。 – Basvo