【问题标题】:LINQ to JSON - Select Individual properties belong to a navigational propertyLINQ to JSON - 选择属于导航属性的单个属性
【发布时间】:2015-04-23 21:00:15
【问题描述】:

我有以下查询,其中 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 输出?

【问题讨论】:

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


    【解决方案1】:

    尝试选择多个

    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();
    

    这有效地展平了列表的列表

    【讨论】:

    • 第一次选择,第二次,还是两者都有?
    • 谢谢!这行得通。一旦我被允许(9 分钟),我将批准答案。
    【解决方案2】:

    它也应该适用于

    return Json(nodes);
    

    而不是

    return Json(new { nodes });
    

    我是用手机写的,所以我没有测试过。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-15
      • 1970-01-01
      • 1970-01-01
      • 2012-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多