我有一個列表從數據庫中(使用數據集)得到它:C#使用Where(LINQ),以具有四個條件篩選列表
IEnumerable<DataSet.spGetDataRow> MyList = new DataSetTableAdapters.spGetDataTableAdapter().GetData(Date1, Date2, PID, RID).ToList();
,我有4個複選框
<asp:CheckBox ID="CheckBox1" Text="1" runat="server" />
<asp:CheckBox ID="CheckBox2" Text="2" runat="server" />
<asp:CheckBox ID="CheckBox3" Text="3" runat="server" />
<asp:CheckBox ID="CheckBox4" Text="4" runat="server" />
什麼我需要的是過濾 'MYLIST'
我做了以下內容:
if (CheckBox1.Checked && !CheckBox2.Checked && !CheckBox3.Checked && !CheckBox4.Checked)
{
MyList = MyList.Where(a => a.Avg < 2);
}
else if (CheckBox2.Checked && !CheckBox1.Checked && !CheckBox3.Checked && !CheckBox4.Checked)
{
MyList = MyList.Where(a => a.Avg >= 2 && a.Avg < 3);
}
else if (CheckBox3.Checked && !CheckBox2.Checked && !CheckBox1.Checked && !CheckBox4.Checked)
{
MyList = MyList.Where(a => a.Avg >= 3 && a.Avg < 6);
}
else if (CheckBox4.Checked && !CheckBox2.Checked && !CheckBox3.Checked && !CheckBox1.Checked)
{
MyList = MyList.Where(a => a.Avg >= 6);
}
這個工作很好,如果我一次只需要檢查一個複選框,但是如果我想一次檢查2或3,該怎麼辦?
創造這麼多,如果條件不是最好的解決辦法,我需要做的是通過LINQ如果更多鈔票
我在做什麼是創建一個新的MYLIST,和「CONCAT」將過濾進去,但它並沒有結束。
預先感謝您。
能否請您發表你想在你的過濾器放置要求。例如,當「Checkbox1」是唯一選中的複選框,然後是「a.Avg <2」等?謝謝 – Christos 2014-10-22 08:29:14
那麼你會怎麼樣?如果(比如說)複選框2和3被選中,效果會是什麼?如果沒有檢查什麼呢? – 2014-10-22 08:29:31
@JonSkeet:如果沒有任何檢查,顯示所有,如果所有的檢查也顯示所有 – 2014-10-22 08:41:14