如何使用lambda表达式更新列表

时间:2011-03-15 03:48:31

标签: asp.net linq

我有两个清单。 lst包含ViewState数据,即gridview&的所有记录。第二个lstRank包含仅标记为已检查的记录的整数列表(即ID)(即Gridview包含复选框的列)。现在我想根据lstRank的整数ID更新lst bool状态。如何通过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();

1 个答案:

答案 0 :(得分:3)

您的问题不明确,但我猜您要更改lst的内容,以便true存在int lstRank如果没有,还是false

显然,元组是不可变的,因此如果要更改其中一个值,则必须生成新的元组实例。当你说你特意想用lambda表达式做这个时,你的意思并不清楚,但我想你可能意味着你不想要一个涉及显式循环的解决方案。那怎么样:

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

如果lstRank很大,您可能需要首先构建一个HashSet进行优化,因为您将进行大量Contains次调用。