从一个对象中的2个表中获取行

use*_*554 0 c# sql oop select object

我有两张桌子:

[Company]

 - CompanyID
 - Company_Name 
 - softID

[User]

 - UserID 
 - CompanyID
 - User_Name
Run Code Online (Sandbox Code Playgroud)

在我的后端,我有以下课程:

Company 

 - CompanyID
 - Company Name
 - List<User> CompanyUsers
Run Code Online (Sandbox Code Playgroud)

我只是在使用System.Data.SqlClient.

我的问题是:

如何与用户一起检索公司对象?

我目前在我的数据访问类中有这个方法:

public Company getCompany(int _softID)
        {
            Company temp = new Company();

            conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["Database"].ConnectionString);
            SqlCommand command = new SqlCommand(@"SELECT * FROM company WHERE softID = @softID", conn);
            command.Parameters.Add("@softID", SqlDbType.Int).Value = _softID;
            {
                conn.Open();
                SqlDataReader reader = command.ExecuteReader();
                if (reader.Read())
                {
                    temp.CompanyID = int.Parse(reader["companyID"].ToString());
                    temp.companyName = reader["company_name"].ToString();
                }
                conn.Close();
            }

            return temp;
    }
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能以最有效的方式检索公司的用户?
我是否需要在我的DAL getUsersByCompanyID中实现另一个方法,我将传递我的temp-object并循环检索所检索的行SELECT * FROM person WHERE companyID = @companyID,或者是否有更好的方法?

Zoh*_*led 5

一种相当简单的方法是使用将公司和用户表连接在一起的查询:

public Company getCompany(int _softID)
{
    Company temp = new Company();

    conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["Database"].ConnectionString);
    SqlCommand command = new SqlCommand(@"SELECT c.CompanyId, Company_Name, UserId, UserName 
                                          FROM company As c
                                          JOIN [User] As u ON c.CompanyId = u.CompanyId
                                          WHERE softID = @softID;", conn);
    command.Parameters.Add("@softID", SqlDbType.Int).Value = _softID;
    {
        conn.Open();
        SqlDataReader reader = command.ExecuteReader();
        while (reader.Read())
        {
            temp.CompanyID = int.Parse(reader["companyID"].ToString());
            temp.companyName = reader["company_name"].ToString();
            temp.CompanyUsers.Add(new User()
                                  {
                                      UserID = int.Parse(reader["UserId"].ToString()),
                                      UserName = reader["UserName"].ToString()
                                  });
        }
        conn.Close();
    }
    return temp;
}
Run Code Online (Sandbox Code Playgroud)

"缺点"是你经常覆盖CompanyIDcompanyName属性,但这是一个非常小的代价,以简单的方式做到这一点.