我有一个名为Subject
的表。它有2列COLOR
和SUBJECT
。颜色基本上是一个整数值。
表中填充了样本数据。
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();
我基本上已将数据库中的值复制到两个列表中。
我需要将具有不同颜色的主题插入到唯一的时间段(用于创建时间表)和具有不同颜色的主题到同一时段。
这种方法是否正确或是否有更好的方法来执行操作?
答案 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);
}
}
注意:我没有编译上面的代码,因此可能存在语法错误。