2014-01-02 3 views
0

В моем приложении, я использовал LINQ следующим образом:Использование значений IGrouping

var GroupedEmployyes = from e in EmpCollection 
            group e by e.identifier into g 
            select new { Employee= g, identifier = g.Key }; 

Я передаю эту группу в какой-то другой функции следующим образом:

 Save(GroupedEmployyes) 

    Save(IEnumerable<IGrouping<string,Employee>> groupedEmployee) 
    { 



    } 

Как я получить доступ к " Employee "и объект" identifier "из параметра groupedEmployee, используя метод Save?

+2

Почему вы получили 'select' часть? Это не делает вам ничего хорошего - это просто преобразование 'IGrouping ' в 'IEnumerable ' для анонимного типа, который содержит ту же информацию. В настоящий момент ваш код не будет компилироваться. –

ответ

1

Ваше выражение ссылка создает объекты анонимного типа, когда вы говорите new { Employee= g, identifier = g.Key };

Чтобы иметь возможность получить на эти значения в другой функции, такие, как ваш Save, необходимо создавать объекты с именем типа. Если вы не можете быть обеспокоены, чтобы создать специальный класс для этого одноразового использования, использовать System.Tuple

С другой стороны, это странно, что вы создаете, что спаривание работника с ключом, потому что IGrouping уже делает это для вас, так, например:

void Save(IEnumerable<IGrouping<string, Employee>> groupedEmployee) 
{ 
    foreach (var group in groupedEmployee) 
    { 
     Console.WriteLine(group.Key); 

     foreach (var emp in group) 
      Console.WriteLine(emp.ToString()); 
    } 
} 

вы можете назвать это с:

Save(EmpCollection.GroupBy(e => e.identifier)); 
Смежные вопросы