2016-05-02 10 views
0

私はSubjectという名前のテーブルを持っています。それは2列COLORSUBJECTを持っています。色は基本的に整数値です。色に基づいてサブジェクト名を取得する

テーブルにはサンプルデータが入っています。

Color  Subject 

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

タイムテーブルを生成するために、上記の被写体に色を割り当てています。表から、被験者の中には色が繰り返されていることがわかります。つまり、同じ時間に2人の被験者を扱うことができます。

私の質問は、Read()操作でwhileループを使用して色をスキャンすると、件名にどうやってアクセスできるのですか。

この操作でユーザー定義の機能を考案できますか?

ありがとうございます。

EDIT:これから進める考えはないので、これまで私が行ってきたことです。

  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(); 

私は基本的にデータベースから2つのリストに値をコピーしました。

異なる色の被写体を一意のタイムスロット(タイムテーブルを作成する)に挿入し、同じタイムスロットに異なる色の被写体を挿入する必要があります。

このアプローチは正しいのですか、それとも操作を実行するためのより良い方法がありますか?

+0

@Hakunamatata私は自分の投稿を編集しました。 – Prithvi

+0

@PrithviなぜSubjectというクラスを作成し、名前と色の2つのプロパティを追加し、2つの別々のリストではなくサブジェクトのリストを作成しましょう。そうすれば、そのリストを使って色に関連した被写体を取得することができます。 – Hakunamatata

+0

@Hakunamatataコードのサンプルで説明していただけますか? – Prithvi

答えて

1

データベースから件名

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

読むデータと呼ばれるクラスを作成し、被験者

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); 
      } 
     } 

ノートのリストに値を追加します。構文エラーがあるかもしれないので、私は上記のコードにコンパイルされていません。

+0

私はこれを試して、それは私が得るはずだったものに近いです。しかし、件名の繰り返しがあります。つまり、私はC# - 1を2回、すべての被験者に対して同様に得ています。件名を一度だけ取得する方法はありますか? – Prithvi

関連する問題