2011-05-21 43 views
1

我以前問過這個問題,並得到了Best approach to write query的回答,但問題是如果您必須將此結果保存在列表中,那麼記錄會重複。例如 給出的連接的結果表EXAMPLE如何保存從查詢檢索到的數據

請參見存在重複的行。你怎樣才能將它們過濾掉,然後保存訂單號的數據? 當然可能有一些方法,但我正在尋找一些不錯的方法

我們如何將數據存儲在列表中,而不是在列表中創建重複的行?

我對我的表當前的代碼是

int lastUserId = 0; 
    sql_cmd = new SqlCommand(); 
    sql_cmd.Connection = sql_con; 

    sql_cmd.CommandText = "SELECT * FROM AccountsUsers LEFT JOIN Accounts ON AccountsUsers.Id = Accounts.userId ORDER BY AccountsUsers.accFirstName"; 
    SqlDataReader reader = sql_cmd.ExecuteReader(); 

    if (reader.HasRows == true) 
    { 
     Users userToAdd = new Users(); 

     while (reader.Read()) 
     { 
      userToAdd = new Users(); 
      userToAdd.userId = int.Parse(reader["Id"].ToString()); 
      userToAdd.firstName = reader["accFirstName"].ToString(); 
      userToAdd.lastName = reader["accLastName"].ToString(); 
      lastUserId = userToAdd.userId; 

      Websites domainData = new Websites(); 
      domainData.domainName = reader["accDomainName"].ToString(); 
      domainData.userName = reader["accUserName"].ToString(); 
      domainData.password = reader["accPass"].ToString(); 
      domainData.URL = reader["accDomain"].ToString(); 
      userToAdd.DomainData.Add(domainData); 

      allUsers.Add(userToAdd); 
     } 
    } 

對於第二個表我有一個將舉行第二表中所有的數據項自定義列表。

返回的表是具有表連接,並具有多行相同

回答

1

除了使用字典的想法安東尼巴庫拉的回答...

如果你堅持用戶的字典和多次調用代碼的樣本中,你應該考慮到用戶帳戶或者是新的,體改,或刪除。

使用的算法如下執行你的SQL查詢時:

  1. 如果行的查詢結果是不是在字典中創建新的用戶添加到字典中。
  2. 如果查詢結果中的行在字典中更新用戶信息。
  3. 如果字典項目不在查詢結果中,則從字典中刪除用戶。

我也建議不使用SELECT *
只能使用你的代碼所需要的表列,這提高了代碼的性能,並通過返回私人用戶信息防止潛在的安全漏洞。

0

我把用戶分爲Dictonary並檢查是否媒體鏈接存在,這樣的事情:

Dictionary<int, Users> allUsers = new Dictionary<int, Users>() 

,然後在閱讀器while循環:

int userId = int.Parse(reader["Id"].ToString()); 
Users currUser = allUsers[userId]; 

if (currUser == null) 
{ 
    currUser = new Users(); 
    currUser.userId = userId); 
    currUser.firstName = reader["accFirstName"].ToString(); 
    currUser.lastName = reader["accLastName"].ToString(); 
    allUsers.Add(userID, currUser); 
} 

Websites domainData = new Websites(); 
domainData.domainName = reader["accDomainName"].ToString(); 
domainData.userName = reader["accUserName"].ToString(); 
domainData.password = reader["accPass"].ToString(); 
domainData.URL = reader["accDomain"].ToString(); 
currUser.DomainData.Add(domainData); 
1

我不確定你爲什麼不在SQL中使用distinct子句來獲取唯一的結果。這也會更快。你看過使用哈希表嗎?

+0

canyou可以幫我做樣品嗎? – 2011-05-21 15:08:53

0

似乎你的問題的根源在你的數據庫表中。 當你說重複的數據行時,你是說你在列表中有重複的條目,或者表中有重複的數據?

給出2個重複的行。

兩個選項:一是 ,防止SQL拉重複的數據通過使用不同的條款,如: 選擇從那裏

第二個選項提到的安東尼奧,是檢查列表已經有它獨特的。

除非有其他原因,否則建議使用第一種方法。

+0

我希望看到2個重複行,以瞭解重複的位置。 – kheya 2011-05-21 16:24:25

+0

謝謝....例如左連接的結果會給重複的行條目請參閱我已標記的示例鏈接 – 2011-05-21 18:59:16

相關問題