我有一个ASP.NET GridView,在每个列标题中,我有一个下拉列表和文本框对,允许用户过滤列值。在DDL中有6个运算符,在文本框中,用户输入要比较的值。例如:
通过这些选择,用户会指示只想查看数量小于100的记录。
我使用EF和GridView.DataBind()手动将数据绑定到gridview。
在我的数据绑定方法中,我有以上三个项目符号字符串(DBColumnName,Operator,Operand)可用于每个激活的过滤器。
问题是当我尝试为我的Linq EF查询编写Where子句时,如下所示:
Entities.Where(entity => entity.Quantity < 100);
我需要做上面的事情但是喜欢这样:
Entities.Where(entity => <DBColumnName> <Operator> Operand);
DBColumnName和Operator是问题,因为操作数只是一个字符串。
我意识到替代方案可能会重复检查每个控件,但这是不可接受的,因为我的GridView中有十个可过滤的列,因此会有大量的代码。例如:
if (QtyColumnFilterIsActivated) {
switch (Operator) {
case "=":
Entities.Where(entity => entity.Quantity = Operand);
break;
case "!=":
Entities.Where(entity => entity.Quantity != Operand);
break;
case "<":
Entities.Where(entity => entity.Quantity < Operand);
break;
// ... and for >, <=, >= ...
}
// And now this switch block for the other 9 columns.
感谢所有提前帮助(或尝试),有这样的资源是很好的。如果有任何需要澄清的话,请告诉我。