如何根据case switch语句运行不同的查询? (C#)

时间:2013-11-26 17:02:20

标签: c# switch-statement

这是我的代码,直到某一点:

var Data = File.ReadAllLines(FilePath).Select(line => line.Split('\t')).ToArray();

int caseSwitch = 0;

if (radioButton1.Checked == true)
{
    caseSwitch = 1;
}
else if (radioButton2.Checked == true)
{
    caseSwitch = 2;
}
else if (radioButton3.Checked == true)
{
    caseSwitch = 3;
}

 var query = from x in Data
             let sw = caseSwitch
             select
                 sw == 1 ? new { Name = x[6], Age = x[2], Date = x[4], Score = x[7]  }
                 : sw == 2 ? new { Name = x[9], Age = x[1], Date = x[0], Score = x[3] }
                 : sw == 3 ? new { Name = x[5], Age = x[8], Date = x[2], Score = x[1] }
                 : null;

当我有多达8个案例切换场景时,代码似乎停止工作......一旦我有8个场景,我似乎得到的错误是“索引超出了数组的范围”,而“:null;”声明以黄色突出显示。我做错了什么?

3 个答案:

答案 0 :(得分:2)

“索引超出了数组的范围”表示在一个(或多个)情况下,x的索引值不正确 - switch语句的数量不会导致该错误。< / p>

在您的选择中发布导致错误的行。

答案 1 :(得分:1)

更好的方法是让查询执行除select选项之外的所有操作。然后你可以像这样进行切换:

IQueryable<whatever> newQuery;
switch (caseSwitch)
{
 case 1: newQuery = query.Select(i => new { Name = i[9], ... }); break;
 case 2: newQuery = query.Select(i => new { Name = i[6], ... }); break;
}

请注意,您不能使用匿名类型,但这不应该是一个问题。这样,您只需发送实际需要的查询,而不是在服务器上执行大小写。

答案 2 :(得分:1)

你根本不需要条件语句 - 因为你的查询结构没有改变,你只需要一个提供NameAge,{{1}索引的表。 }和Date列:

Score