【发布时间】:2018-03-13 11:38:16
【问题描述】:
我这周刚开始学习带有 EF Core 的 ASP.Net Core 2.0 和使用 C# 的 MVC。所以我是一个完整的菜鸟。
它们是一种使用从模型/restful API 中提取的动态参数来创建动态 Switch (SortOrder) 的方法吗?这样我的 Switch 语句就不会超过 30 多个案例。
我正在寻找关于这个 Sudo 的东西:
switch (sortOrder)
{
default:
Tickets = Tickets.OrderBy(s => s.ID);
break;
foreach (string Tick in Tickets)
{
case Tick :
Tickets = Tickets.OrderBy(T => Tick);
break;
}
我的 TicketController 的参考部分
public async Task<IActionResult> Index(string sortOrder, string searchString)
{
//sorting
ViewData["NameSortParm"] = String.IsNullOrEmpty(sortOrder) ? "ID" : "";
ViewData["DateSortParm"] = sortOrder == "ID" ? "Environment" : "Date";
ViewData["CurrentFilter"] = searchString;
var Tickets = from s in _context.MyTickets
select s;
// search
if (!String.IsNullOrEmpty(searchString))
{
Tickets = Tickets.Where(T => T.ID.ToString().Contains(searchString)
|| T.Environment.Contains(searchString)
|| T.YourRef.Contains(searchString)
|| T.Priority.Contains(searchString)
|| T.Type.Contains(searchString)
|| T.ProductName.Contains(searchString)
|| T.Environment.Contains(searchString)
|| T.Version.Contains(searchString)
|| T.Description.Contains(searchString)
|| T.Status.Contains(searchString)
|| T.Contact.Contains(searchString));
}
////sorting
//switch (sortOrder)
//{
// case "ID":
// Tickets = Tickets.OrderByDescending(s => s.ID);
// break;
// case "Date":
// Tickets = Tickets.OrderBy(s => s.CreatedDate);
// break;
// case "Environment":
// Tickets = Tickets.OrderBy(s => s.Environment);
// break;
// default:
// Tickets = Tickets.OrderBy(s => s.ID);
// break;
//}
switch (sortOrder)
{
default:
Tickets = Tickets.OrderBy(s => s.ID);
break;
foreach (string Tick in Tickets)
{
case Col :
Tickets = Tickets.OrderBy(T => Col)
}
}
// return results
return View(await Tickets.AsNoTracking().ToListAsync());
}
【问题讨论】:
-
查看 OData。在创建符合 OData 的 REST-API 时,您可以通过过滤和排序(以及其他选项)。请参阅odata.org/documentation/odata-version-2-0/uri-conventions 第 4.2 节 这受 WCF 和 ASP.NET Web API 支持。
-
考虑使用Dynamic LINQ
-
我已将此标记为重复问题,但请查看this answer,了解如何使用与实体框架相关的表达式进行排序。
标签: c# asp.net-mvc foreach switch-statement asp.net-core-2.0