Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Asp.Net中linq的扁平化和重构_C#_Asp.net_Json_Linq - Fatal编程技术网

C# Asp.Net中linq的扁平化和重构

C# Asp.Net中linq的扁平化和重构,c#,asp.net,json,linq,C#,Asp.net,Json,Linq,我想用行程列表重构原始的json数据,并使用Linq基于登机点和下降点返回一个转换后的扁平列表。下面是原始json数据的示例和我想要的结果。我该怎么做?请帮忙。谢谢 原始Json: [{ tripId: 1, name: "abc express", boardingTimes: [ { time: 1200, id: 12, name: "A" }, { time

我想用行程列表重构原始的json数据,并使用Linq基于登机点和下降点返回一个转换后的扁平列表。下面是原始json数据的示例和我想要的结果。我该怎么做?请帮忙。谢谢

原始Json:

[{
     tripId: 1,
     name: "abc express",
     boardingTimes: [
     {
         time: 1200,
         id: 12,
         name: "A"
     },
     {
         time: 1215,
         id: 14,
         name: "B"
     }
     ],
     droppingTimes: [{
         time: 1400,
         id: 15,
         name: "C"
     }]
}]
结果:

[{
         tripId: 1,
         name: "abc express",
         boardingTimes: 
         {
             time: 1200,
             id: 12,
             name: "A"
         },
         droppingTimes: {
             time: 1400,
             id: 15,
             name: "C"
         }
},
         tripId: 1,
         name: "abc express",
         boardingTimes: 
         {
             time: 1215,
             id: 14,
             name: "B"
         },
         droppingTimes: {
             time: 1400,
             id: 15,
             name: "C"
         }
]
您可以使用,它是以下内容的一部分:


小提琴:谢谢,布莱恩·罗杰斯。你的解决方案解决了我的问题。但是,我不明白为什么
bt=>1
dt=>1
会得到正确的登机时间和降落时间?1代表什么?在
Join
方法中,第二个和第三个参数是lambda函数,用于检索我们要在两个相应列表中加入的对象的键。因此,例如,如果我们想将
boardingTime.id
droppingTime.id
匹配,我们将分别使用
bt=>bt.id
dt=>dt.id
lambda函数。但在这种情况下,没有可匹配的键;这些ID彼此不对应。相反,我们希望将每次旅行中的所有登机时间与所有下车时间相匹配。因此,我刚刚让lambda函数返回一个“键”,无论发生什么情况,它都将始终匹配,即1。我当时被卡住了,尝试了几次使用linq,但到目前为止,没有任何结果是有用的。
JArray trips = JArray.Parse(originalJson);

JArray pairs = new JArray(trips
    .Select(trip => 
        new JArray(trip["boardingTimes"]
            .Join(trip["droppingTimes"], bt => 1, dt => 1, (bt, dt) => 
                new JObject(
                    new JProperty("tripId", trip["tripId"]),
                    new JProperty("name", trip["name"]),
                    new JProperty("boardingTimes", bt),
                    new JProperty("droppingTimes", dt)
                )
            )
        )
    )
    .SelectMany(a => a)
);

string flattenedJson = pairs.ToString();