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,或者是否有更好的方法?
一种相当简单的方法是使用将公司和用户表连接在一起的查询:
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)
"缺点"是你经常覆盖CompanyID和companyName属性,但这是一个非常小的代价,以简单的方式做到这一点.