【问题标题】:Creating a json-style inside a linq select statement在 linq select 语句中创建 json 样式
【发布时间】:2017-09-25 16:00:28
【问题描述】:

在我的 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。

【问题讨论】:

  • 您可以将“rates”属性定义为匿名对象数组。

标签: c# json linq


【解决方案1】:

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

{
    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}
            }
}

【讨论】:

  • 这会编译,但会引发运行时错误:System.Reflection.TargetInvocationException。 {"数组类型 'f__AnonymousType32[System.String,System.Nullable1[System.Decimal]][]' 无法在查询结果中初始化。考虑使用 'System.Collections.Generic.List1[<>f__AnonymousType32[System.String,System .Nullable`1[System.Decimal]]]' 代替。"}
  • 'r.rate1'等的数据类型是什么?
  • 都是十进制类型。
  • 这是一个奇怪的问题,我在控制台中试过这个,它可以使用十进制和十进制?类型。我有点好奇知道更多关于这个问题的信息。您能否分享一下详细信息,例如框架版本、正在进行的任何数据库查询以及 lineitems 对象的来源?
  • EF 框架 (EF6)。 lineItems 是 IQueryable 并且费率是 IQueryable.
【解决方案2】:

我最终这样做了:

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,但我想它也没有伤害任何东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多