using System.Collections.Generic;
public static void Main ()
DataTable dtEntrada = new DataTable ();
dtEntrada.Columns.Add (new DataColumn ("ANALISTA", typeof(String)));
dtEntrada.Columns.Add (new DataColumn ("SITUACAO", typeof(String)));
dtEntrada.Columns.Add (new DataColumn ("QTD", typeof(Int32)));
dtEntrada.Rows.Add (new Object[] { "EDSON", "APROVADO", 1 });
dtEntrada.Rows.Add (new Object[] { "EDSON", "REPROVADO", 2 });
dtEntrada.Rows.Add (new Object[] { "EDUARDO RAMOS", "APROVADO", 3 });
dtEntrada.Rows.Add (new Object[] { "EDUARDO TORQUATO", "APROVADO", 1 });
dtEntrada.Rows.Add (new Object[] { "LUCAS", "APROVADO", 1 });
dtEntrada.Rows.Add (new Object[] { "LUCAS", "REPROVADO", 1 });
DataTable dtSaida = new DataTable ();
dtSaida.Columns.Add (new DataColumn ("ANALISTA", typeof(String)));
dtSaida.Columns.Add (new DataColumn ("APROVADO", typeof(Int32)));
dtSaida.Columns.Add (new DataColumn ("REPROVADO", typeof(Int32)));
dtSaida.Columns.Add (new DataColumn ("TOTAL", typeof(Int32)));
var lstAnalistas = (from a in dtEntrada.Select()
group a by a["ANALISTA"] into g
select (String) g.Key).ToList<String>();
int aprovado, reprovado, total;
foreach (var analista in lstAnalistas) {
DataRow linhaAprovado = (from a in dtEntrada.Select ()
where (String) a ["ANALISTA"] == analista &&
(String) a ["SITUACAO"] == "APROVADO"
select a).FirstOrDefault ();
DataRow linhaReprovado = (from a in dtEntrada.Select ()
where (String) a ["ANALISTA"] == analista &&
(String) a ["SITUACAO"] == "REPROVADO"
select a).FirstOrDefault ();
if (linhaAprovado != null)
aprovado = (int) linhaAprovado ["QTD"];
if (linhaReprovado != null)
reprovado = (int) linhaReprovado ["QTD"];
total = aprovado + reprovado;
dtSaida.Rows.Add (new Object[] { analista, aprovado, reprovado, total });
foreach (DataRow linha in dtSaida.Rows) {
foreach (DataColumn coluna in dtSaida.Columns) {
Console.Write (linha [coluna.ColumnName].ToString () + "\t");