创建对象集合并对其进行查询

本文关键字:查询 集合 合并 创建对象 | 更新日期: 2023-09-27 18:35:11

一个愚蠢的问题。我有三节课。类数据表管理器是一种全局类。

public  class DataTableManager
{
    public DataTable dt1 { get; set; }
    public List<object> SchoolInfo { get; set; }
    public string ApplicationName {get;set;}
    public int number;
}

在公共类 DataCreate 中,我想向对象添加不同类型的变量,然后我们可以在另一个公共类摘要中获取它们。我的问题是我不熟悉不同类型变量的对象集合。

例如,在

public class DataCreate 
{
   public string FirstName { get; set; }
   public string LastName { get; set; }
   public int ID { get; set; }
   public GradeLevel Year;
}

我想将它们添加到学校信息。假设它们来自文本框。不知道该怎么做?

以及如何在我的第三节课摘要中检索它?

谢谢。

更新:

DataTableManager 对象是保存所有表单信息的全局对象。在每个表单中,我们都希望设置对象并由DataTableManager对象持有。最后我想以最后的形式得到它们。我想要的是每个表单都有一个对象来保存所有变量,尽管它们具有不同的类型。

创建对象集合并对其进行查询

要创建一个新的DataCreate对象并将其添加到DataTableManager对象的SchoolInfo列表中,您需要执行以下操作:

DataTableManager manager = new DataTableManager();
DataCreate data = new DataCreate();
data.LastName = TextBox1.Text;
data.ID = TextBox2.Text;
manager.SchoolInfo.Add(data);

但是,我应该指出,将SchoolInfo声明为List<Object>类型的财产是一种不好的做法。 最好将其声明为List<DataCreate>.

若要从 DataCreate 对象本身将 DataCreate 对象添加到列表中,需要执行以下操作:

manager.SchoolInfo.Add(this);

DataTableManager 不是一个对象,而是一个类型。 您必须实例化它才能创建一个对象(就像我调用new DataTableManager时所做的那样)。 或者,您可以将其设置为静态类,以便没有需要实例化的对象,并且您可以通过其类型名称直接访问其成员(例如 DataTableManager.SchoolInfo.Add(...) ),但这不是您当前定义它的方式。

但是,我根本不建议按照您的方式做事。 拥有全局变量从来都不是一个好主意。 相反,如果表单需要访问 DataTableManager 对象,它应该请求它(通过将一个参数传递给表单上的构造函数的参数,或者通过在窗体上设置公共属性,或者通过在窗体上调用某种公共初始化方法)。 您必须在某处有一些显示这些 DataCreate 表单的代码。 正是该代码所在的类应该实例化管理器并将其提供给窗体。

但是,通常您不希望存储对所有表单的引用。 通常,您只想存储输入的数据。 为此,您需要创建一个没有功能的新类,只有数据的公共属性。 然后让窗体返回其中一个对象,然后让显示窗体的中心类获取返回的数据并将其添加到管理器中。

例如:

public class DataManager
{
    public List<StudentData> Students { get; set; }
    // etc.
}
public class StudentData
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    // etc.
}
public class StudentEntryDialog : Form
{
    public StudentData StudentData { get; set; }
    // ... code to call storeData method when user chooses to do so ...
    private void storeData()
    {
        StudentData = new StudentData();
        StudentData.FirstName = TextBox1.Text;
        StudentData.LastName = TextBox2.Text;
        // etc.
    }
}
public class CentralCodeOfSomeSort
{
    private DataManager manager = new DataManager();
    private showStudentEntry()
    {
        StudentEntryDialog dialog = new StudentEntryDialog();
        dialog.ShowDialog();
        if (dialog.StudentData != null)
            manager.Students.Add(dialog.StudentData);
    }
}

我不确定你想要什么。只是猜测。为学生创建课程

public class Student
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int ID { get; set; }
    ...
}

并将您的列表定义为

public List<Student> SchoolInfo { get; set; }

现在,您可以将学生添加到列表中

 var manager = new DataTableManager(); 
 var student = new Student {
     FirstName = firstNameTextBox.Text;
     LastName = lastNameTextBox.Text;
     ID = Int32.Parse(IdTextBox.Text);
 };
 manager.SchoolInfo.Add(student);  

您可以使用(作为示例)查询列表

var query = manager.SchoolInfo
    .Where(s => s.LastName.StartsWith("A")
    .OrderBy(s => s.LastName)
    .ThenBy(s => s.FirstName)