2016-03-01 2 views
0

im создание группы из моей модели в MVC мне удается получить 3 основных значения, но я не знаю, как добавить больше данных в мой выбор в linq.Linq Group BY Несколько значений

Это моя Linq заявление:

@foreach (var item in Model.GroupBy(a => a.Pla).Select(p => new { Pla = p.Key, Quantity = p.Sum(q => q.Cantidad), Total = p.Sum(x => x.Total) })) 

Это мой стол:

Con Fecha   Rid  Pdv Pla Descripcion  Total Quantity 
---------------------------------------------------------------------------- 
1  2016-01-01 COMIDAS FUEM 184 POZ ROJO   1445 17 
100 2016-01-01 COMIDAS VTSI 693 ENVASE 1 LT   50  5 
103 2016-01-01 COMIDAS REST 73 NOPAL/PIÑA VASO  34  6 
104 2016-01-01 DESAYUNOS REST 73 NOPAL/PIÑA VASO  34  1 

Это дает мне уникальные Pla предметы и сумму Total и Quantity данных, но Мне также нужно отобразить еще 3 столбца desc, Rid и Pdv Как я могу добавить их в свой Linq?

Сначала попробуйте

foreach (var item in db.Pos.GroupBy(a=> a.Pla).Select(p=> new  
{Pdv = p.Pdv, Pla = p.Key, Nombre=p.Descripcion, Rid=p.Rid, Quantity = p.Sum(q=>q.Cantidad), Total= p.Sum(x=>x.Total)})) 
{ 
    listItemPopu.Add(item.ToString()); 
} 

Это мой первый Attemp, но я не могу заставить его работать,

ответ

1

Учитывая, что ваш пла группируется по ключу, каждая группа имеет список Плас, с уникальный ключ, а все пласты в группе имеют одинаковые Pdv, Description, Riv.

Вы можете получить 3 поля из ключа, который вы уже извлекли.

{ 
    var pdv = item.Pla.Pdv; // etc. 

    listItemPopu.Add(item.ToString()); 
} 

Но если вы не хотите, чтобы сделать это, потому что вы не можете применить сумму строковых полей, вам нужно сделать FirstOrDefault на них.

foreach (var item in db.Pos.GroupBy(a=> a.Pla).Select(p=> new  
{ 
    Pla = p.Key, 
    Pdv = p.Select(a => a.Pdv).FirstOrDefault(), 
    Nombre = p.Select(a => a.Description).FirstOrDefault(), 
    Rid = p.Select(a => a.Rid).FirstOrDefault(), 
    Quantity = p.Sum(q=>q.Cantidad), 
    Total= p.Sum(x=>x.Total) 
})) 

{ 
    listItemPopu.Add(item.ToString()); 
} 

, и если ваши 3 поля находятся на самой пласе, вы также можете опирать ее на ключ.

foreach (var item in db.Pos.GroupBy(a=> a.Pla).Select(p=> new  
{ 
    Pla = p.Key, 
    Pdv = p.Key.Pdv, 
    Nombre = p.Key.Description, 
    Rid = p.Key.Rid, 
    Quantity = p.Sum(q=>q.Cantidad), 
    Total= p.Sum(x=>x.Total) 
})) 

{ 
    listItemPopu.Add(item.ToString()); 
} 
+0

Rid выглядит так, как будто он может быть другим для одного и того же Плая, что может быть проблемой. –