Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.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# 具有附加参数的Linq Group By Into_C#_Asp.net Mvc_Linq - Fatal编程技术网

C# 具有附加参数的Linq Group By Into

C# 具有附加参数的Linq Group By Into,c#,asp.net-mvc,linq,C#,Asp.net Mvc,Linq,我有以下sql结果: 表格结果 目标是按Projected和SequenceId对该结果进行分组。稍后的JSON结果应该如下所示: [ { "ProjectId": 1, "ProjectName": "Testprojekt 1", "Sequences": [ { "SequenceId": 2, "SequenceName": "ESN_Tauschen" }, { "Se

我有以下sql结果: 表格结果

目标是按Projected和SequenceId对该结果进行分组。稍后的JSON结果应该如下所示:

[
  {
    "ProjectId": 1,
    "ProjectName": "Testprojekt 1",
    "Sequences": [
      { 
        "SequenceId": 2,
        "SequenceName": "ESN_Tauschen" 
      },
      {
        "SequenceId": 3,
        "SequenceName": "Demontage"
      }
    ]
  },
  {
    "ProjectId": 2,
    "ProjectName": "Testprojekt 2",
    "Sequences": [
      {
        "SequenceId": 3,
        "SequenceName": "Demontage"
      }
    ]
  }
]
group new { p, s } by p.ProjectId into g
let p = g.FirstOrDefault().p
select new
{
    ProjectId = g.Key,
    ProjectName = p.Name,
    Sequences =
        (from e in g
         group e.s by e.s.SequenceId into g2
         let s = g2.FirstOrDefault()
         select new
         {
             SequenceId = g2.Key,
             SequenceName = s.Name
         }).ToList()
};
我当前的linq表达式给出以下结果:

[
  {
    "ProjectId": 1,
    "Sequences": [
      2,
      3
    ]
  },
  {
    "ProjectId": 2,
    "Sequences": [
      3
    ]
  }
]

 var context = new ReworkPlace();

        var result = from p in context.Projects
                     join rs in context.ReworkStations on p.ProjectId equals rs.ProjectId
                     join l in context.ReworkStationReworkConfigurationLinkSets on rs.ReworkStationId equals
                         l.ReworkStationId
                     join rc in context.ReworkConfigurations on l.ReworkConfigurationId equals rc.ReworkConfigurationId
                     join s in context.Sequences on rc.SequenceId equals s.SequenceId
                     group s.SequenceId by p.ProjectId into g
                     select new
                     {
                         ProjectId = g.Key,
                         Sequences = g.ToList()
                     };


        return Json(result, JsonRequestBehavior.AllowGet);
我不知道如何调整linq表达式以将未分组属性如ProjectName、SequenceId和SequenceName包含到json结果中


如果有人能帮助我,那就太好了。

要在不完全重写查询的情况下获得所需的结果,请替换分组部分:

 group s.SequenceId by p.ProjectId into g
 select new
 {
     ProjectId = g.Key,
     Sequences = g.ToList()
 };
比如说:

[
  {
    "ProjectId": 1,
    "ProjectName": "Testprojekt 1",
    "Sequences": [
      { 
        "SequenceId": 2,
        "SequenceName": "ESN_Tauschen" 
      },
      {
        "SequenceId": 3,
        "SequenceName": "Demontage"
      }
    ]
  },
  {
    "ProjectId": 2,
    "ProjectName": "Testprojekt 2",
    "Sequences": [
      {
        "SequenceId": 3,
        "SequenceName": "Demontage"
      }
    ]
  }
]
group new { p, s } by p.ProjectId into g
let p = g.FirstOrDefault().p
select new
{
    ProjectId = g.Key,
    ProjectName = p.Name,
    Sequences =
        (from e in g
         group e.s by e.s.SequenceId into g2
         let s = g2.FirstOrDefault()
         select new
         {
             SequenceId = g2.Key,
             SequenceName = s.Name
         }).ToList()
};
诀窍是在
group
by
之间包含分组中所需的数据(除了
,该键是在
by
之后添加的)


若要获取其他字段,可以将它们包括在分组键中,或者如果它们与定义的分组键相同,使用
FirstOrDefault
从分组中的第一条记录中获取它们,如上例所示。

如果使用导航属性而不是加入,我认为您完全可以不使用
组。
。非常感谢伊万,您救了我一天:-)这正是您提到的工作方式!