-1
辞書とADOとの関係を多面的にする必要があります。 ここに私のコードがあり、クライアント上で企業を反復不可能にする必要があります。これは、クエリでオーダーbyを使用することはできません。助けてよろしくお願いします! クエリの使用:辞書を多対多にする
string Query= "SELECT c.ID, c.FirstName, c.LastName,
c.EGN, c.Birthday,
com.ID as CompanyID,
com.Name,
com.Location
FROM Clients c
LEFT JOIN ClientCompanies cc
ON c.ID=cc.ClientID
LEFT JOIN Company com ON cc.CompanyID=com.ID";
static List<Client> GetClients(SqlCommand command)
{
List<Client> listClients = new List<Client>();
Dictionary<int, Client> dicClients = new Dictionary<int, Client>();
Dictionary<int, Company> dicCompanies = new Dictionary<int, Company>();
using (SqlDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
Client newClient = null;
Company newCompany = null;
int clientId = (int)reader["ID"];
dicClients.TryGetValue(clientId, out newClient);
if (newClient == null)
{
newClient = new Client();
newClient.ID = (int?)reader["ID"];
newClient.FirstName = (!reader.IsDBNull(reader.GetOrdinal("FirstName")) ? (string)reader["FirstName"] : null);
newClient.LastName = (!reader.IsDBNull(reader.GetOrdinal("LastName")) ? (string)reader["LastName"] : null);
newClient.EGN = (!reader.IsDBNull(reader.GetOrdinal("EGN")) ? (string)reader["EGN"] : null);
newClient.Birthday = (!reader.IsDBNull(reader.GetOrdinal("Birthday")) ? (string)reader["Birthday"] : null);
}
int companyId = (!reader.IsDBNull(reader.GetOrdinal("CompanyID")) ? (int)reader["CompanyID"] : 0);
//Some check with dictionary
if (newCompany == null)
{
newCompany = new Company();
newCompany.ID = (!reader.IsDBNull(reader.GetOrdinal("CompanyID")) ? (int?)reader["CompanyID"] : null);
newCompany.Name = (!reader.IsDBNull(reader.GetOrdinal("Name")) ? (string)reader["Name"] : null);
newCompany.Location = (!reader.IsDBNull(reader.GetOrdinal("Name")) ? (string)reader["Name"] : null);
newClient.ClientTo.Add(newCompany);
}
dicClients[clientId] = newClient;
}
listClients = dicClients.Values.ToList();
return listClients;
}
何を手助けが必要ですか?期待どおりに動作していないのですか、エラーが発生しますか、何か? SQL、コード、またはその両方に問題はありますか?なぜORDER BYを使用できないのですか? – stuartd
私は質問で注文することなくそれを作る仕事があります。私は、このソリューションを高速にできるようにしなければならないということを意味します。 –