Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.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 - Fatal编程技术网

C# Linq按查询分组分组的结果

C# Linq按查询分组分组的结果,c#,linq,C#,Linq,我有以下例子: Model mod1 = new Model { Header = "A", canDelete = true,pax=1 }; Model mod2 = new Model { Header = "B", canDelete = true,pax=1 }; Model mod3 = new Model { Header = "A", canDelete = true,pax=2 }; Model mod4 = new Model { Header = "B", canD

我有以下例子:

Model mod1 = new Model {  Header = "A", canDelete = true,pax=1 };
Model mod2 = new Model {  Header = "B", canDelete = true,pax=1 };
Model mod3 = new Model {  Header = "A", canDelete = true,pax=2 };
Model mod4 = new Model {  Header = "B", canDelete = false,pax=2 };
Model mod5 = new Model {  Header = "A", canDelete = true,pax=3 };
Model mod6 = new Model {  Header = "B", canDelete = false,pax=3 };
Model mod7 = new Model {  Header = "A", canDelete = false,pax=4 };
Model mod8 = new Model {  Header = "B", canDelete = true,pax=4 };
我将这些模型添加到listMod中

我想先按pax号码分组,所以我使用:

var resultQuery = listMod.GroupBy(p=>p.pax);
如何按标题和烛台对resultQuery的结果重新分组

目标是分为3组:

1st group : mod1 and mod2
2nd group : mod3 , mod4 , mod5 and mod6
3rd group : mod7 and mod8

好吧,也许有更好的方法,但这个方法应该有效,假设每个pax号码都有两件物品

“诀窍”是将第一个和第二个
canDelete
/
标题
项对按
pax
分组,并根据该值分组

组内的列表被展平(使用
SelectMany

如果你想避免这种糟糕的连接,你也可以这样做

var result = listMod
                 .GroupBy(m => m.pax)
                 .Select(m => new
                 {
                      a1 = m.First().canDelete,
                      a2 = m.First().Header,
                      b1 = m.Last().canDelete,
                      b2 = m.Last().Header,
                      value = m.Select(x => x)
                  })
                  .GroupBy(m => new {m.a1, m.a2, m.b1, m.b2})
                  .Select(g => g.SelectMany(x => x.value))
                  //.ToList();

你是如何得到第二组的?@Grundy我想我终于明白了:这是坎德莱特和Header的组合(所以一对相同的pax,a和true,B和true,a和true,B和false)。但我认为你必须忘记第一次分组(至少是分组的方式)才能得到要求的结果!目标是我想要一个mod 2到mod 6的分组。我首先根据paxNumber分组,我将得到4个带有关键Pax number的分组。然后我需要使用标题和烛台对我的结果集进行重新分组,这样我就可以得到上面解释过的3组结果。效果非常好。非常感谢你的帮助
var result = listMod
                 .GroupBy(m => m.pax)
                 .Select(m => new
                 {
                      a1 = m.First().canDelete,
                      a2 = m.First().Header,
                      b1 = m.Last().canDelete,
                      b2 = m.Last().Header,
                      value = m.Select(x => x)
                  })
                  .GroupBy(m => new {m.a1, m.a2, m.b1, m.b2})
                  .Select(g => g.SelectMany(x => x.value))
                  //.ToList();