gpt4 book ai didi

c# - 不错的简单 ASP.NET MVC2 C# 问题(Switch 语句)

转载 作者:行者123 更新时间:2023-11-30 21:18:36 27 4
gpt4 key购买 nike

早上好

我有以下代码行:

 var viewModel = new ClassifiedsBrowseViewModel
{
Category = categoryModel,
Listings = categoryModel.Listings.OrderBy(c => c.Price).ToList()
};

世界上一切都很好,这段代码工作正常。但现在我想添加一个 switch 语句,允许我更改我订购列表的方式(在上面的代码中它是按价格订购的)。

所以我显然不能在新模型减速中使用 switch 语句,所以我将把 switch 语句放在上面,例如:

  switch(searchCriteria)
{
case "Price":
break;
case default:
break;
}

所以我的问题是如何将两者联系起来?顺便说一句,列表在 ViewModel 中声明为:

 public List<Listing> Listings { get; set; }

我想我可以在 Controller 中声明一个 Listings 变量,然后在 Switch 中将该变量设置为 categoryModel.Listings.OrderBy(c => c.[Search Criteria]).ToList()然后简单地有 Listings = Listings ?

非常感谢,J

使用

使用 Ribon 的方法:

 var viewModel = new ClassifiedsBrowseViewModel
{
Category = categoryModel,
Listings = categoryModel.Listings.OrderBy(c =>
{
switch (searchCriteria)
{
case "Price": return c.Price;
case "FuelType": return c.FuelType;
default: return c.Price;
}
}).ToList()
};

最佳答案

IMO 一个漂亮、干净且可读的解决方案是创建一个接受 IQueryable 的扩展方法,以及一个代表各种排序选项的枚举。

public static IOrderedQueryable<Listing> WithListingOrder(this IQueryable<Listing> source, PriceOrderingOptions orderBy)
{
switch (orderBy)
{
case ListingOrderingOptions.Price:
return source.OrderBy(x => x.Price);
... // other enumerations
}
}

我有一个通用的排序扩展方法(采用 T、TKey),但在您的情况下,由于您使用的是字符串(搜索条件),因此不能在此处使用泛型。

但我认为将排序选项表示为枚举应该可以防止出现“魔术字符串”。

然后像这样使用它:

var searchCritera = ListingOrderingOptions.Price;

var viewModel = new ClassifiedsBrowseViewModel
{
Category = categoryModel,
Listings = categoryModel.Listings.WithListingOrder(searchCriteria)
}).ToList()
};

这里的主要好处是您隐藏扩展背后的丑陋开关 - 这里的目标是保持您的 Controller 干净。

关于c# - 不错的简单 ASP.NET MVC2 C# 问题(Switch 语句),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4172496/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com