c#等同于sql' s"其中值为IN(' a',' b'' c')"

时间:2016-03-21 18:48:46

标签: c# asp.net gridview

我基本上需要根据特定值更改Gridview的行颜色。这就是我所拥有的:

if ((String)DataBinder.Eval(e.Row.DataItem, "STATUS") == "A" || (String)DataBinder.Eval(e.Row.DataItem, "STATUS") == "B" || (String)DataBinder.Eval(e.Row.DataItem, "STATUS") == "C")
{
    e.Row.BackColor = Color.Yellow;
}

我正在寻找更清晰(或者我应该说更好)的方式,类似于我们在sql中的方式,而不是必须使用||操作者:

IF STATUS in('A','B','C')

5 个答案:

答案 0 :(得分:4)

使用LINQ Contains之类的:

if(new[] {"A", "B", "C"}
        .Contains((String)DataBinder.Eval(e.Row.DataItem, "STATUS")))

如果你想忽略大小,那么:

if (new[] {"A", "B", "C"}
    .Contains((String) DataBinder.Eval(e.Row.DataItem, "STATUS"),
        StringComparer.InvariantCultureIgnoreCase))
{

}

答案 1 :(得分:1)

您可以尝试使用set来执行此任务, 如果它不会在运行时更改,则静态构建它 或者动态构建它:

var statuses = new HashSet<string>
{
    "A",
    "B",
    "C"
}

并检查如下:

statuses.Contains((String)DataBinder.Eval(e.Row.DataItem, "STATUS"))

答案 2 :(得分:0)

实现目标的一种方法是创建一个临时的List项,并使用条件中Contains的{​​{1}}方法:

List

编辑:@Habib打败了我的答案,也更清洁了。 :)

答案 3 :(得分:0)

这不是解决此问题的最佳方式,但我认为此linq查询可以为您提供帮助。

if (listLine[-1]=='largeDoses'):
    listLine[-1] = '3'
elif (listLine[-1]=='smallDoses'):
    listLine[-1] = '2'
else:
    listLine[-1] = '1'

答案 4 :(得分:0)

您可以使用词典方法。好的部分是你只需将它保存在某个逻辑可以集中在一个地方的地方。

var colorStatus = new Dictionary<string,Color>();
colorStatus["A"] = Color.Yellow;
colorStatus["B"] = Color.Yellow;
colorStatus["C"] = Color.Yellow;

现在稍后您可以使用此词典进行测试然后分配。

string status = (String)DataBinder.Eval(e.Row.DataItem, "STATUS");
if(colorStatus.ContainsKey(status))
{
    e.Row.BackColor = colorStatus[status];
}