2015-04-23 83 views
1

我有以下查詢,其中Nodes是MonProfiles內的導航屬性。LINQ to JSON - 選擇屬於導航屬性的單個屬性

var nodes = await dbContext.MonProfiles.Include(x => x.Nodes). 
      Where(x => x.Id == profileId). 
      Select(x => x.Nodes. 
       Select(y => new { y.NodeNativeId, y.NodeClassId, y.NodeName, y.NodeClass.ClassName })). 
       ToListAsync(); 

return Json(new { nodes }); 

我現在面臨的問題是,在一個陣列內返回數組JSON:

{ 
    "nodes": [[{ 
     "NodeNativeId": 1234567, 
     "NodeClassId": 9999, 
     "NodeName": "TestName", 
     "ClassName": "TestClassName" 
    }]] 
} 

我想回的是:

{ 
    "nodes": [{ 
     "NodeNativeId": 1234567, 
     "NodeClassId": 9999, 
     "NodeName": "TestName", 
     "ClassName": "TestClassName" 
    }] 
} 

這是我第一次使用LINQ只能選擇屬於Navagation屬性的單個屬性,並且這是我第一次遇到這種類型的結果。我怎樣才能糾正我的LINQ查詢,讓我有我期望的JSON輸出?

回答

5

儘量選擇很多,而不是

var nodes = await dbContext.MonProfiles.Include(x => x.Nodes). 
     Where(x => x.Id == profileId). 
     SelectMany(x => x.Nodes. 
      Select(y => new { y.NodeNativeId, y.NodeClassId, y.NodeName, y.NodeClass.ClassName })). 
      ToListAsync(); 

這有效地拉平列表列表

+0

這是第一次選擇,第二次還是兩者? – blgrnboy

+0

爲清晰起見 – Dom

+0

謝謝!這工作。我會在允許的情況下批准答案(9分鐘)。 – blgrnboy

0

還應與

return Json(nodes); 

,而不是

return Json(new { nodes }); 

我的工作m wri從手機中取出所以我沒有測試過它。