2011-05-21 90 views
0

我不知道我問的是否可能。這就是我來這裏討論的原因。對通用列表執行操作

我有一個自定義列表,其中包含所有用戶及其詳細信息。

在我的應用程序開始我從數據庫中填充它。換句話說,它包含數據庫的副本。因此,我不想每次從數據庫中提取數據,我想在這個列表上執行操作。

我寫了一個查詢,從數據庫表中搜索用戶,我想將它翻譯爲這個列表,這樣我的數據庫處理是最小的。這是一個單一設備應用程序,沒有其他用戶修改該應用程序。

List<Users> selectedUsers = new List<Users>(); 
sql_cmd = new SqlCommand(); 
sql_cmd.Connection = sql_con; 
#region First Name Search 
if (category == SearchCategory.ByFirstName) 
{ 
    sql_cmd.Parameters.Add("@firstName", SqlDbType.VarChar).Value = Value; 
    sql_cmd.CommandText = "SELECT * FROM AccountsUsers WHERE accFirstName Like @firstName+'%'"; 
    SqlDataReader reader = sql_cmd.ExecuteReader(); 
    if (reader.HasRows == true) 
    { 
     while (reader.Read()) 
     { 
      Users userToAdd = new Users(); 
      userToAdd.userId = int.Parse(reader["Id"].ToString()); 
      userToAdd.firstName = reader["accFirstName"].ToString(); 
      userToAdd.lastName = reader["accLastName"].ToString(); 
      // GetAccountsDetails(userToAdd.userId, ref userToAdd); 
      selectedUsers.Add(userToAdd); 
     } 
    } 
} 

我indend做的是包含許多用戶認爲我已經沒有了users.for例如列表數據庫搜索列表,如果在搜索框中我輸入AS那麼我就可以過濾掉所有的條目與開始如。 想要查詢通配符的類似功能。

+0

你的LINQ如何? – 2011-05-21 20:17:21

+0

不要在該部分明亮,但我想看看它是如何完成的,因爲LINQ是智能的東西 – 2011-05-21 20:19:25

+1

我是否認爲你想填充這個列表一次,然後操縱其中的數據。如果是這樣,你的代碼是確定的,你只需要刪除過濾。一旦你填充了列表,你可以使用LINQ來操作你需要的元素。例如,如果你想要一個名字爲Afnan的用戶列表,你可以使用'var afnans = selectedUsers.Where(user => user.firstName ==「afnan」)' – 2011-05-21 20:25:43

回答

1

很模糊的問題。什麼是你的問題?只有在需求或應用程序退出時,纔可能執行程序中的所有內容並將數據發送到數據庫。有幾種方法可以做到這一點。

你開始的方式沒問題。你可以用任何你想要的方式來改變用戶,最後你再運行它們(或者只是那些已經改變的),並且寫一個方法將它們全部更新到數據庫。

[編輯]

看到您的評論我假設你正在談論LINQ。

使用Linq(System.Linq),您可以修改,排序,跳過或取..等列表。

何時/何要應用排序/排序,你可以使用這樣的東西

selectedList.Where(m=>m.StartsWith("AS")); 
selectedList.OrderBy(m=>m.firstname); 

這是最好不要,因爲你想繼續使用它設置selectedList了這一點。

因此,無論你設置它的數據源。您可以將它的itemssource或datacontext設置爲上述任一項。

+0

對不起,可能我已經寫下了不清楚的問題。我要做的就是搜索列表,我沒有爲用戶提供數據庫。例如列表包含許多用戶,如果在搜索框中輸入'AS '那麼我可以過濾掉所有的條目從AS開始。 想要查詢通配符的類似功能。 – 2011-05-21 20:24:48

+0

噢,是的,這正是我所尋找的。謝謝 – 2011-05-21 20:41:37