2010-09-16 5 views
0

J'ai un DataTable comme celui-ci,C# logique de traitement de données aide

AccessDateTime   | Direction 
2010-09-15 12:12:49 | IN 
2010-09-15 12:36:03 | OUT 
2010-09-15 12:53:05 | IN 
2010-09-15 14:04:19 | OUT 
2010-09-15 14:17:35 | IN 
2010-09-15 16:07:57 | OUT 
2010-09-15 16:10:57 | OUT 
2010-09-15 18:43:18 | OUT 

je besoin d'une logique rapide pour convertir les données dans ce format

Date  | In Time | Out Time 
2010-09-15 12:12:49 | 12:36:03 
2010-09-15 12:53:05 | 14:04:19 
2010-09-15 14:17:35 | 16:07:57 
2010-09-15 N/A  | 16:07:57 
2010-09-15 N/A  | 16:10:57 
2010-09-15 N/A  | 18:43:18 

S'il vous plaît aidez-moi à trouver un exemple de code ou Tout conseil est fortement apprécié.

Merci

+0

Comment savez-vous que OutTime de 12:36:03 est liée à InTime de 12:12:49 pour être en mesure de les relier ensemble? – InSane

+0

Mais pourquoi génétique-algorithme? – nan

+0

si c'est un In, il y a un Out et il est décidé sur l'ordre de temps. Donc, dans ce cas, basé sur cette hypothèse, il doit calculer. BTW c'est pour le programme d'entrée-sortie de porte. Merci. – kakopappa

Répondre

1
DataTable output = new DataTable(); 

using (var e = dataTable.AsEnumerable().GetEnumerator()) 
{ 
    if (!e.MoveNext()) 
     // No data in the datatable at all 
     return; 

    // Get first row 
    var dt = (DateTime) e.Current["AccessDateTime"]; 
    var row = ((Direction) e.Current["Direction"] == Direction.In) 
     ? new { Date = dt.Date, InTime = (TimeSpan?) dt.TimeOfDay, OutTime = (TimeSpan?) null } 
     : new { Date = dt.Date, InTime = (TimeSpan?) null, OutTime = (TimeSpan?) dt.TimeOfDay }; 
    DataRow newRow; 

    // Look at all the other rows 
    while (e.MoveNext()) 
    { 
     dt = (DateTime) e.Current["AccessDateTime"]; 
     if ((Direction) e.Current["Direction"] == Direction.Out && row.OutTime == null) 
     { 
      row = new { Date = row.Date, InTime = row.InTime, OutTime = (TimeSpan?) dt.TimeOfDay }; 
      continue; 
     } 

     newRow = output.NewRow(); 
     newRow["Date"] = row.Date; 
     newRow["InTime"] = row.InTime; 
     newRow["OutTime"] = row.OutTime; 
     row = new { Date = dt.Date, InTime = (TimeSpan?) dt.TimeOfDay, OutTime = (TimeSpan?) null }; 
    } 

    newRow = output.NewRow(); 
    newRow["Date"] = row.Date; 
    newRow["InTime"] = row.InTime; 
    newRow["OutTime"] = row.OutTime; 
} 
+0

Après avoir regardé votre code, je suis vraiment déprimé! Pendant tout ce temps j'ai pensé que je connaissais bien C#. Mais votre code, m'a tout simplement bluffé. Merci beaucoup pour l'exemple de code. vraiment apprécié – kakopappa

+0

Content d'être utile. :) S'il y a un aspect particulier pour lequel vous aimeriez avoir de l'aide, n'hésitez pas à demander. Je me rends compte qu'il n'y a pas beaucoup de commentaires là-dedans ... – Timwi