LINQ to JSON - 选择单个属性属于导航属性

时间:2015-04-23 21:00:16

标签: c# json asp.net-mvc linq

我有以下查询,其中Nodes是MonProfiles中的导航属性。

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输出?

2 个答案:

答案 0 :(得分: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();

这有效地压缩了列表列表

答案 1 :(得分:0)

它也适用于

return Json(nodes);

而不是

return Json(new { nodes });

我是通过手机写的,所以我还没有对它进行过测试。