C# 无法在dataview行筛选器中转换SQL查询

C# 无法在dataview行筛选器中转换SQL查询,c#,asp.net,sql-server,datatable,rowfilter,C#,Asp.net,Sql Server,Datatable,Rowfilter,我试图在rowfilter上使用case-when条件转换SQL查询,但它不起作用 这是我的SQL查询: select * from myview where myview.CHARGE_CODE = (CASE WHEN 'ALL' = 'ALL' THEN CHARGE_CODE ELSE '1023'

我试图在rowfilter上使用case-when条件转换SQL查询,但它不起作用

这是我的SQL查询:

select * 
from myview 
where myview.CHARGE_CODE = (CASE 
                               WHEN 'ALL' = 'ALL' THEN CHARGE_CODE 
                               ELSE '1023' 
                            END)
这是rowfilter查询:

dt.DefaultView.RowFilter = "CHARGE_CODE=(CASE '"+ddlCharge_Code.SelectedValue +"' when 'ALL' THEN CHARGE_CODE ELSE '"+ ddlCharge_Code.SelectedValue+"' END )";

如何在C#中转换SQL查询?

您没有以相同的方式转换它。在MySQL查询中,有一个检查
'ALL'='ALL'
,它将全部为true。因此,以下语句将产生与原始查询相同的结果:

select * from myview where myview.CHARGE_CODE = CHARGE_CODE
如果将其转换为定义的行过滤器,则会得到:

dt.DefaultView.RowFilter = "CHARGE_CODE=CHARGE_CODE";
我认为,你错放了要核对的条款。我想应该是:

dt.DefaultView.RowFilter = "CHARGE_CODE='"+ddlCharge_Code.SelectedValue + "'";

最好检查可选参数并将其添加到查询中,但这会起作用

var paramValue = ddlCharge_Code.SelectedValue; 
string filter = string.Format("('{0}' = 'ALL') OR ('{0}' <> 'ALL' AND  CHARGE_CODE = '{0}')", paramValue);
dt.DefaultView.RowFilter = filter;
var paramValue=ddlCharge\u code.SelectedValue;
string filter=string.Format(“({0}='ALL”)或({0}''ALL'和CHARGE_CODE='{0}'),paramValue);
dt.DefaultView.RowFilter=过滤器;

在我的sql查询中,ALL代表表中的所有记录,因此您的查询在此不起作用。我有一组多个选择条件,用户可以选择ALL charge\u code或single,因此当用户选择ALL时,我的sql查询工作正常,它将给出所有charge\u code,或者如果用户选择single charge\u code,它将根据该条件给出。