2017-06-14 3 views
1

brauche Hilfe mit meiner foreach, um den leeren Datensatz zu recongonisieren und füllen Sie die Lücke mit "-";C# leere Datensätze auffüllen

sagen wir, wir haben 30min, 45min, 90min, 120min und nicht 60min in dem Fall:

es die Gesamt Aufzeichnungen jeder ID zählen kann, sagen wir, die maximal 5 ist, 30min, 45min, 60min, 90min und 120min.

Wenn es 3 gibt, dann könnte es prüfen, was fehlt und dann mit "-" füllen kann.

Gleiche Idea des Skripts.

List<Treatment> treatment = new List<Treatment>(); 
treatment.Add(new Treatment { id = 1, treatmentNameId = 11, duration = "30", price = 30 }); 
treatment.Add(new Treatment { id = 1, treatmentNameId = 11, duration = "45", price = 45 }); 
treatment.Add(new Treatment { id = 1, treatmentNameId = 11, duration = "60", price = 60 }); 
treatment.Add(new Treatment { id = 1, treatmentNameId = 2, duration = "30", price = 30 }); 
//treatment.Add(new Treatment { id = 1, treatmentNameId = 2, duration = "45", price = 45 }); 
treatment.Add(new Treatment { id = 1, treatmentNameId = 2, duration = "60", price = 60 }); 

var newList = (from t in treatment 
         select t) 
         .AsQueryable().ToList(); 

List<List> newList= new List<List>(); 
foreach (var item in newList) 
{  
    if (item.duration == "30") 
    { 
     newList.Add(new List { treatmentNameId = item.treatmentNameId, thirtyMin = "30" }); 
    } 

    if (item.duration == "45") 
    { 
     newList.Add(new List { treatmentNameId = item.treatmentNameId, fortyFive= "45" }); 
    }     

    if (item.duration == "60") 
    { 
     newList.Add(new List { treatmentNameId = item.treatmentNameId, sixty= "60" });   
    } 
} 

Das Endergebnis etwas wie sollte,

id:1 30, 45, 60, - 
id:2 30, - , 60, 90 
id:3 - , 45, -, 90 

etc ...

Vielen vielen Dank für die Hilfe.

Antwort

0

Ich werde nicht eine sehr detaillierte Erklärung von all dem zur Verfügung stellen, aber konzeptionell bin ich nur Gruppierung von treatmentNameId und dann etwas sehr ähnliches zu einem äußeren Join in SQL. Wenn der Gruppenbeitritt für die Dauer leer ist, wähle ich statt der Dauer '-'. Verwenden anonymer Typen für die Kürze.

 var durations = new[] {"15", "30", "45", "60"}; 

     var results = treatments 
      .GroupBy(t => t.treatmentNameId).Select(group => new 
      { 
       treatmentNameId = group.Key, 
       durations = durations.GroupJoin(group, s => s, g => g.duration, 
        (s, grouping) => !grouping.Any() ? "-" : s) 
      }); 

     foreach (var result in results) 
     { 
      Console.WriteLine(result.treatmentNameId + ": " + string.Join(", ", result.durations)); 
     } 

Daraus ergibt sich:

11: -, 30, 45, 60 
2: -, 30, -, 60 

Wenn Sie Probleme mit etwas spezielleren haben, würde ich mich freuen, weiter zu erklären.

Verwandte Themen