2011-03-15 42 views
0

我有兩個列表。 lst包含ViewState數據,即gridview & second lstRank的所有記錄僅包含那些被標記爲檢查的記錄(即,Gridview包含複選框的列)的整數列表(即ID)。現在我想根據lstRank的整數ID更新lst布爾狀態。如何可以通過lambda表達式實現如何使用lambda表達式更新列表

List<Tuple<int, string, bool>> lst = (List<Tuple<int, string,bool>>)ViewState["gvData"]; 
List<int> lstRank = gvDetails.Rows.OfType<GridViewRow>().Where(s => ((CheckBox)s.FindControl("chkSelect")).Checked) 
                     .Select(s => Convert.ToInt32(((Label)s.FindControl("lblRankCD")).Text)).ToList(); 

回答

3

你的問題不太清楚,但我猜你想改變lst的內容,這樣的布爾值true如果存在lstRankint,或false如果不是?

顯然,元組是不可變的,所以如果你想改變其中一個值,你將不得不生成新的元組實例。當你說你特別想用lambda表達式來做這件事時,你的意思並不清楚,但我認爲你可能意味着你不需要一個涉及顯式循環的解決方案。那麼這個怎麼樣:

lst = lst.Select(oldValues => 
    Tuple.Create(oldValues.Item1, 
       oldValues.Item2, 
       lstRank.Contains(oldValues.Item3))).ToList(); 

如果lstRank較大,則可能需要首先建立一個HashSet出來,因爲你會做了很多Contains調用優化。