【发布时间】:2014-10-22 08:25:18
【问题描述】:
我有一个从数据库中得到的列表(使用数据集):
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,并将过滤后的“连接”到其中,但结果并不好。
提前谢谢你。
【问题讨论】:
-
能否请您发布您想要放置在过滤器中的要求。例如,当
Checkbox1是唯一选中的复选框时,然后a.Avg<2等?谢谢 -
那么,如果(比如说)复选框 2 和 3 被选中,您会想要产生什么效果?如果什么都没检查呢?
-
@JonSkeet: 如果什么都没有检查,则显示全部,如果所有检查也显示全部
-
@MohamadY.Dbouk 但是在选中 2 和 3 时显示,什么都没有?
-
@Vladimirs:如果选中 2 和 3:where 条件如下:MyList.Where(a => a.Avg >= 2 && a.Avg
标签: c# asp.net linq dataset ienumerable