Первое, что я хотел бы упомянуть, это то, что ваш MVC-шаблон немного свободен и в контроллере гораздо больше кода, чем я бы выбрал.
Я предпочитаю и IMO лучший подход - перенести логику на бизнес-уровень или в хранилище.
В хранилище / Запрос:
string selectqry = "select * from Table1 where datereceived is null ";
Всегда происходит, поэтому это должно быть за пределами ваших утверждений if / case.
Если вы не используете Entity Framework и хотите создать запрос вручную, тогда вы можете выполнить:
switch (sortOrder)
{
case "NotFiltered":
selectqry = selectqry + " and submissionid not in (select id from Table2 where status='Done')";
break;
case "Filtered":
selectqry = selectqry + " and status <> 'Pending'";
break;
}
Или немного чище:
Dictionary<string, string> filters = new Dictionary<string, string>()
{
{"NotFiltered", "and submissionid not in (select id from Table2 where status='Done')"},
{"Filtered", " and status <> 'Pending'"}
}
и затем:
string selectqry = "select * from Table1 where datereceived is null ";
selectqry += filters[sortOrder];
Хотя, почему фильтр называется порядком сортировки?
Еще лучше, я бы полностью исключил строку sql, настроил dbContext (предполагая Entity Framework) и сделал бы что-то более похожее на это:
var results = dbContext.Table1;
if (sortOrder == "NotFiltered")
{
results.where(x => !dbContext.Table2.Select(s => s.Id).Contains(x.Id);
}
else
{
results.where(x => x.Status != "Pending");
}
return results.ToList();