2011-02-16 41 views
0

作爲學習LINQ的一部分,我陷入了以下問題。LINQ的複選框驗證

窗體有N個複選框和一個按鈕。只有當用戶選中任意兩個複選框時,該按鈕才能被啓用。我正在嘗試使用LINQ來實現此功能,但無法達到預期的效果。

我使用了下面的代碼,但只有在任何一個複選框被選中時纔有效。

btnAgree.Enabled = (from chkbox in Controls.OfType<CheckBox>() select chkbox).Any(b => b.Checked); 

回答

2

btnAgree.Enabled = (from chkbox in Controls.OfType<CheckBox>() select chkbox).Count(b => b.Checked) >= 2;

應該做的伎倆!

1

試試這個:

btnAgree.Enabled = ((from chkbox in Controls.OfType<CheckBox>() select chkbox where chkbox.Checked = true).Count >= 2) 
+0

據我所知,'where`應該來之前`select`,反正`Controls.OfType ()`是不夠的 - 有不需要所有的`from`語法。 – 2011-02-16 07:59:35

+0

對不起,我是面向VB的,我只是想給出方向...... – ReFocus 2011-02-16 08:24:36

0

計數可以返回選中的複選框的數量:

btnAgree.Enabled = (from chkbox in Controls.OfType<CheckBox>() select chkbox).Count(b => b.Checked) >= 2; 
0

你想要的LINQ表達式返回如果爲true且僅當正好複選框被選中?

如果是的話,這應該做的伎倆:

btnAgree.Enabled = Controls.OfType<CheckBox>() 
          .Count(b => b.Checked) == 2;