2013-05-27 3 views
1

Привет всем, что не так с моим запросом GroupBy?что не так с моим запросом GroupBy

У меня есть следующий класс:

public class AssembledPartsDTO 
{ 
    public int PID { get; set; } 
    public McPosition Posiotion { get; set; } 
    public string Partnumber { get; set; } 
    public string ReelID { get; set; } 
    public int BlockId { get; set; } 
    public List<string> References { get; set; } 
} 

Я пытаюсь выполнить следующий запрос:

assembledPcb.AssembledParts.GroupBy(entry => new 
         { 
          entry.PID, 
          entry.Posiotion.Station, 
          entry.Posiotion.Slot, 
          entry.Posiotion.Subslot, 
          entry.Partnumber, 
          entry.ReelID, 
          entry.BlockId 
         }). 
         Select((key , val)=> new AssembledPartsDTO 
          { 
           BlockId = key.Key.BlockId, 
           PID = key.Key.PID, 
           Partnumber = key.Key.Partnumber, 
           ReelID = key.Key.ReelID, 
           Posiotion = new McPosition(key.Key.Station, key.Key.Slot, key.Key.Subslot), 
           References = val <-- ???? 
          }) 

Но val, что у меня есть там типа int, а не вал группирования, что я может сделать там val.SelectMany(v => v).ToList(); любая идея, что не так в моем коде?

ответ

5

Второй параметр Enumerable.Select - это индекс элемента в последовательности. Таким образом, в этом случае это (нулевой) номер группы. Вы просто хотите, чтобы выбрать группу, вам не нужно это индекс:

var result = assembledPcb.AssembledParts.GroupBy(entry => new 
{ 
    entry.PID, 
    entry.Posiotion.Station, 
    entry.Posiotion.Slot, 
    entry.Posiotion.Subslot, 
    entry.Partnumber, 
    entry.ReelID, 
    entry.BlockId 
}) 
.Select(g => new AssembledPartsDTO 
{ 
    BlockId = g.Key.BlockId, 
    PID = g.Key.PID, 
    Partnumber = g.Key.Partnumber, 
    ReelID = g.Key.ReelID, 
    Posiotion = new McPosition(g.Key.Station, g.Key.Slot, g.Key.Subslot), 
    References = g.SelectMany(entry => entry.References) 
        .Distinct() 
        .ToList() 
}); 

(предполагая, что вы хотите получить список различных ссылок)

Побочное Примечание: у вас есть опечатка в собственность- наименование: Posiotion

Смежные вопросы