Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.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到实体-按多个联接表分组_C#_Linq_Entity Framework - Fatal编程技术网

C# Linq到实体-按多个联接表分组

C# Linq到实体-按多个联接表分组,c#,linq,entity-framework,C#,Linq,Entity Framework,我有一个连接多个表的查询。然后我只需要按前两列进行分组,然后选择其余列的值。目前,它在前4列中工作正常,但随后GROUPBY停止在所有列中工作。我以前也使用过类似的查询,效果很好,所以如果有人有任何见解,我将不胜感激 var query = (from p in context.Process join pf in context.table on p.ProcessID equals pf.ProcessID join f in context.Flows on pf.Flow

我有一个连接多个表的查询。然后我只需要按前两列进行分组,然后选择其余列的值。目前,它在前4列中工作正常,但随后GROUPBY停止在所有列中工作。我以前也使用过类似的查询,效果很好,所以如果有人有任何见解,我将不胜感激

var query = (from p in context.Process
    join pf in context.table on p.ProcessID equals pf.ProcessID
    join f in context.Flows on pf.FlowID equals f.FlowID
    join d in context.Directions on pf.DirectionID equals d.DirectionID
    join ft in context.FlowTypes on f.FlowTypeID equals ft.FlowTypeID
    join fp in context.FlowProperties on f.FlowPropertyID equals fp.FlowPropertyID
    join ug in context.UnitGroups on fp.UnitGroupID equals ug.UnitGroupID
    group new { p, pf, f, d, ft, fp, ug} by new
    {                             
        FlowPropertyName = fp.Name,
        ug.ReferenceUnit,
        FlowDirection = d.FlowDirection,
        FlowType = ft.Type,
        //Won't group on these 3 column
        //ProcessFlowResult =pf.Result,
        //FlowName = f.Name,
        //ProcessFlowID = pf.ProcessFlowID, 
    } into g
    select new Model
    {
        FlowPropertyName = g.Key.FlowPropertyName,
        ReferenceUnit = g.Key.ReferenceUnit,
        FlowDirection = g.Key.FlowDirection,
        FlowType = g.Key.FlowType,
        //ProcessFlowResult = g.Key.ProcessFlowResult,
        //FlowName = g.Key.FlowName,
        //ProcessFlowID = g.Key.ProcessFlowID
    }).AsQueryable();
return query;
我想出来了

这是该解决方案的缩小版lambda,使用导航属性;-),以防万一其他人也在寻找类似的东西

 var query = context.ProcessFlows
                .GroupBy(p => new
                {
                 FlowPropertyName = p.Flow.FlowProperty.Name
                 })
                .SelectMany(pf => pf.Select(p => new IntermediateFlow
                {
                    FlowPropertyName = p.Flow.FlowProperty.Name,
                    ReferenceUnit = p.Flow.FlowProperty.UnitGroup.Name
                })).AsQueryable();
            return query.OrderBy(pFlow => new { pFlow.FlowPropertyName, pFlow.ReferenceUnit });

查询的第二行是否应该类似于:
在context.ProcessFlows中加入pf…
?它不可能是您粘贴的,因为您将使用别名
p
两次…首先开始使用导航属性而不是连接。然后看看问题是否仍然存在。詹姆斯-我只是查看了我的查询,希望这个问题很简单(而且很愚蠢),但它的别名是“pf”。我不知道它是怎么被粘贴在这里的。