在linq select语句中创建json样式

时间:2017-09-25 16:00:29

标签: c# json linq

在我的MVC控制器中,我有以下linq查询(工作正常):

var result = from li in lineItems
             join r in rates on li.something = r.something
             select new
             {
                 li.something
                 li.somethingElse
                 li.another
                 r.something
                 r.somethingElse
                 r.rate1
                 r.rate2
                 r.rate3
                 r.rate4
             };

return JSON(result.ToList(), JsonRequestBehavior.AllowGet);

这会产生一个平坦的物体。然而,我真正需要的是让费率成为他们自己的一个对象,更深层次,如下:

{
    li.something
    li.somethingElse
    li.another
    r.something
    r.somethingElse
    rates = {
                {id = "1", value = r.rate1}
                {id = "2", value = r.rate2}
                {id = "3", value = r.rate3}
                {id = "4", value = r.rate4}
            }
}

我很难让C#语法正确实现。硬编码id很好。我将始终只有1 2 3和4的费率。

2 个答案:

答案 0 :(得分:3)

您可以定义费率'作为匿名对象数组的属性,请参阅下面的示例以供参考。

{
    li.something,
    li.somethingElse,
    li.another,
    r.something,
    r.somethingElse,
    rates = new[]{
                new {id = "1", value = r.rate1},
                new {id = "2", value = r.rate2},
                new {id = "3", value = r.rate3},
                new {id = "4", value = r.rate4}
            }
}

答案 1 :(得分:0)

我最终这样做了:

rates = new
{
    Rate1 = new {id = "1", value = r.rate1}
    Rate2 = new {id = "2", value = r.rate2}
    Rate3 = new {id = "3", value = r.rate3}
    Rate4 = new {id = "4", value = r.rate4}
}

没有抛出任何错误。它命名为JSON,我并不需要,但我想它也没有伤害任何东西。