根据颜色

时间:2016-05-02 02:19:58

标签: c# .net

我有一个名为Subject的表。它有2列COLORSUBJECT。颜色基本上是一个整数值。

表中填充了样本数据。

Color       Subject

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

我正在为上述主题指定颜色以生成时间表。从表中我们可以看到一些主题有重复的颜色,这意味着这两个主题可以在同一时间处理。

我的问题是,当我使用Read()操作的while循环扫描颜色时,如何访问主题名称。

是否可以为此操作设计用户定义的功能?

谢谢。

编辑:由于我没有想法继续,这是我迄今为止所做的。

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

我基本上已将数据库中的值复制到两个列表中。

我需要将具有不同颜色的主题插入到唯一的时间段(用于创建时间表)和具有不同颜色的主题到同一时段。

这种方法是否正确或是否有更好的方法来执行操作?

1 个答案:

答案 0 :(得分:1)

创建一个名为Subject

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

注意:我没有编译上面的代码,因此可能存在语法错误。