作爲學習LINQ的一部分,我陷入了以下問題。LINQ的複選框驗證
窗體有N個複選框和一個按鈕。只有當用戶選中任意兩個複選框時,該按鈕才能被啓用。我正在嘗試使用LINQ來實現此功能,但無法達到預期的效果。
我使用了下面的代碼,但只有在任何一個複選框被選中時纔有效。
btnAgree.Enabled = (from chkbox in Controls.OfType<CheckBox>() select chkbox).Any(b => b.Checked);
作爲學習LINQ的一部分,我陷入了以下問題。LINQ的複選框驗證
窗體有N個複選框和一個按鈕。只有當用戶選中任意兩個複選框時,該按鈕才能被啓用。我正在嘗試使用LINQ來實現此功能,但無法達到預期的效果。
我使用了下面的代碼,但只有在任何一個複選框被選中時纔有效。
btnAgree.Enabled = (from chkbox in Controls.OfType<CheckBox>() select chkbox).Any(b => b.Checked);
btnAgree.Enabled = (from chkbox in Controls.OfType<CheckBox>() select chkbox).Count(b => b.Checked) >= 2;
應該做的伎倆!
試試這個:
btnAgree.Enabled = ((from chkbox in Controls.OfType<CheckBox>() select chkbox where chkbox.Checked = true).Count >= 2)
計數可以返回選中的複選框的數量:
btnAgree.Enabled = (from chkbox in Controls.OfType<CheckBox>() select chkbox).Count(b => b.Checked) >= 2;
你想要的LINQ表達式返回如果爲true且僅當正好複選框被選中?
如果是的話,這應該做的伎倆:
btnAgree.Enabled = Controls.OfType<CheckBox>()
.Count(b => b.Checked) == 2;
據我所知,'where`應該來之前`select`,反正`Controls.OfType()`是不夠的 - 有不需要所有的`from`語法。 –
2011-02-16 07:59:35
對不起,我是面向VB的,我只是想給出方向...... – ReFocus 2011-02-16 08:24:36