2016-05-02 13 views
0

Ich habe eine Tabelle mit dem Namen Subject. Es hat 2 Spalten COLOR und SUBJECT. Die Farbe ist im Grunde ein ganzzahliger Wert.Abrufen von Betreff-Namen basierend auf Farbe

Die Tabelle wurde mit Beispieldaten gefüllt.

Color  Subject 

1   C# 
2   Java 
3   Python 
4   C++ 
5   Operating Systems 
6   DBMS 
4   C 
6   Ruby 

Ich zuweisen Farben für die oben genannten Themen, um eine Zeit-Tabelle zu generieren. Aus der Tabelle können wir sehen, dass einige der Themen wiederholt Farben haben, es bedeutet, dass diese zwei Themen zur gleichen Stunde behandelt werden können.

Meine Frage ist, wie kann ich auf die Betreff-Namen zugreifen, wenn ich durch die Farben mit einer While-Schleife mit der Read() Operation scannen.

Kann eine benutzerdefinierte Funktion für diesen Vorgang erstellt werden?

Vielen Dank.

EDIT: Da ich keine Idee habe weiterzumachen, habe ich das bisher gemacht.

  con.Open(); 
      SqlCommand get = new SqlCommand("select * from Color_Subjects",con); 
      SqlDataReader read = get.ExecuteReader(); 

      while (read.Read()) 
      { 
       colors.Add((int)read.GetValue(1)); 
       subjects.Add(read.GetString(0)); 
      } 

      int colcount = colors.Count(); 
      int subcount = subjects.Count(); 

Ich habe im Grunde die Werte aus der Datenbank in zwei Listen kopiert.

Ich muss die Fächer mit der unterschiedlichen Farbe zu einem eindeutigen Zeitfenster (zum Erstellen eines Zeitplans) und die Fächer mit der unterschiedlichen Farbe zum gleichen Zeitfenster einfügen.

Ist dieser Ansatz korrekt oder gibt es einen besseren Ansatz, um die Operation durchzuführen?

+0

@Hakunamatata Ich habe meinen Beitrag mit meiner bisherigen Arbeit bearbeitet – Prithvi

+0

@Prithvi Warum nicht eine Klasse namens Subject erstellen und ihr zwei Eigenschaften für Name und Farbe hinzufügen und eine Liste von Subjects anstelle von zwei separaten Listen erstellen. Auf diese Weise können Sie diese Liste verwenden, um mit Farben assoziierte Themen zu erhalten. – Hakunamatata

+0

@Hakunamatata könnten Sie bitte mit einem Beispielcode erklären? – Prithvi

Antwort

1

Erstellen Sie eine Klasse Betreff genannt

public class Subject 
{ 
    public string SubjectName {get;set;} 
    public int Color {get;set;} 
} 

lesen Daten aus Ihrer Datenbank und fügen Sie Werte von Themen zur Liste

con.Open(); 
      SqlCommand get = new SqlCommand("select * from Color_Subjects",con); 
      SqlDataReader read = get.ExecuteReader(); 

      List<Subject> subjects = new List<Subject>(); // Declare a list of subjects 
      while (read.Read()) 
      { 
       subjects.Add(new Subject(){ SubjectName=read.GetString(0), 
              Color=((int)read.GetValue(1)) }); 
      } 
    //Get All Unique Colors 
     List<int> allColors = subjects.Select(x=>x.Color).Distinct().ToList(); 

     //Iterate through each color and get subjects associated with that color 
     foreach(int thisColor in allColors) 
     { 
      List<Subject> subjectsForThisColor = subjects.Where(x=>x.Color==thisColor).ToList(); 
      // Output to console -- 
      foreach(Subject s in subjectsForThisColor) 
      { 
       Console.WriteLine(s.SubjectName + " - " + s.Color); 
      } 
     } 

Anmerkung: Ich habe nicht über Code kompilieren, so gibt es Syntaxfehler sein kann .

+0

Ich habe das versucht und es ist nah an dem, was ich bekommen sollte. Aber, es gibt eine Wiederholung der Subjektnamen. d. h. in der Ausgabe werde ich C# - 1 zweimal und ähnlich für alle Subjekte erhalten. Gibt es eine Möglichkeit, die Betreff-Namen nur einmal zu erhalten? – Prithvi

Verwandte Themen