LINQ由可空的孩子和父母分组

时间:2015-07-07 11:54:04

标签: c# linq

大家好! 我刚刚在LINQ查询中遇到了超时问题。 我有3个表:工作,项目和子项目。

    Projects:
    +--------+
    |  Id    |<--+<--+
    |  Name  |   |   |
    +--------+   |   |
    SubProjects: |   |
    +--------+   |   |
 +->|  Id    |   |   |
 |  |  Name  |   |   |
 |  | ProjId |---+   |
 |  +--------+       |
 |  Work:            |
 |  +------------+   |
 |  |  Id        |   |
 |  |  Type      |   |
 |  |  ProjId    |---+
 +--|  SubProjId | (nullable)
    +------------+

我需要根据子项目创建报告:

  • 按子项目ID分组,
  • 如果子项目标识为空 - >按项目标识分组

我通过制作两个查询然后合并它们来解决它,但有时会超时。 我是用

做的
result1.AddRange(result2);

因为

var temp = result1.Concat(result2);

抛出异常:

Internal .NET Framework Data Provider error 1004, 0, Unresolvable Var used in Command: VarType=Computed, Id=2090.

有人可以帮助我在一个查询中创建它吗?

3 个答案:

答案 0 :(得分:2)

我不确定你的代码是什么样的,所以这可能不完美,但你可以试试这样的东西:

var result = from work in works
             group work by work.SubProjId ?? work.ProjId into groupedWorks
             select groupedWorks.ToList();

var result = works.GroupBy(work => work.SubProjId ?? work.ProjId).ToList();

答案 1 :(得分:0)

尝试此查询

var itemlist =contex.Work.where(x=>x.SubProjId !=null).Groupby(x=>x.SubProjId).Concat(Contex.Work.where(x=>x.SubProjId ==null).Groupby(x=>x.ProjId)).ToList();    

答案 2 :(得分:0)

我猜这是你需要的:

var groups = from work in ctx.Works // the work table
             group work // we want to group whole work "rows"
                // we are grouping by project id and subproject id
                by new { ProjId = work.ProjId, SubProjId = work.SubProjId } 
                into g // and we are calling the grouping 'g'
             select g; // select the group

// example of doing something with the groupings
foreach (var group in groups)
{
   var key = group.Key; // gets a { ProjId, SubProjId } tuple
   foreach (var work in group)
   {
      // each work is a row in the Work-table
   }
}