我有两个清单。 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();
答案 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
次调用。