【发布时间】:2018-04-10 22:48:18
【问题描述】:
我有一个教师列表,我希望能够显示特定教师列表中的所有数据。我想按名字搜索。但是,要么我的列表为空,要么我无法从中获取数据。我不知道问题出在哪里。
这是我如何将数据从我的 sql server 数据库加载到我的列表中:
public void connectDbRead(List<Teacher> Teachers)
{
var teacherData = TeacherData.GetInstance();
//Get all students in the singleton
var teachers = teacherData.Teachers;
using (SqlConnection conn = new SqlConnection())
{
conn.ConnectionString = "Server=DESKTOP;Database=Test;Trusted_Connection=true";
conn.Open();
SqlCommand command = new SqlCommand("SELECT * FROM TEACHERS", conn);
command.Parameters.Add(new SqlParameter("0", 1));
teachers.Clear();
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
teachers.Add(new Teacher
{
Name = (string)reader["NAME"],
FamilyName = (string)reader["FAMILY_NAME"],
Age = (int)reader["AGE"]
});
Console.WriteLine(String.Format("{0} | {1}| {2}",
reader[1], reader[2], reader[3]));
}
}
}
}
这是我从列表中搜索数据的方式:
public void searchTeacher(List<Teacher> Teachers)
{
string teacherName = "";
Console.WriteLine("Who do you want to find. Write his name: ");
teacherName = Console.ReadLine();
List<Teacher> teachers = Teachers.FindAll(x => x.Name == teacherName);
Console.WriteLine("List Of ELements!");
foreach (Teacher t in teachers)
{
Console.WriteLine(t.ToString());
}
}
我在 main 函数中这样调用它,但在 switch 情况下:
var teacherData = TeacherData.GetInstance();
var teachers = teacherData.Teachers;
teacherData.searchTeacher(teachers);
teacherData.connectDbRead(teachers);
【问题讨论】:
-
为什么不用Linq to SQL?查看docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/linq/…
-
您是要进行部分比较还是完全匹配?外壳是一样的吗?也许你应该做
teachers = Teachers.Where(t => string.Equals(t.Name, teacherName, StringComparison.OrdinalIgnoreCase));或者,如果你正在做一个parial search,那么.Where(t => t.IndexOf(teacherName, StringComparison.OrdinalIgnoreCase) > -1) -
我想在列表中进行搜索,但仍为空。我只能获取整个列表,而不能删除或搜索数据。我试图应用你的代码,但它仍然不起作用: List
newList = Teachers.FindAll(x => x.Name.Equals(teacherName));另外,我这样称呼它: foreach (Teacher t in newList) { Console.WriteLine(t.ToString()); }