我的控制器中有一个方法是根据提交的数据执行某些逻辑,我的var
项目应分配给不同的结果?
例如我的控制器方法是这样的:
public ActionResult Index(SearchCriteria criteria)
{
var db = new EbuyDataEntities();
//criteria.SearchKeyword = "movie";
if (!string.IsNullOrEmpty(criteria.SearchKeyword))
{
var auctionData = db.Auctions.First(q => q.Description.Contains(criteria.SearchKeyword));
}
else
{
var auctionData = db.Auctions.OrderBy(item => item.EndTime);
}
switch (criteria.GetSortByField())
{
case SearchCriteria.SearchFieldType.Price:
auctionData = auctionData.OrderBy(q => q.CurrentPrice.Value);
break;
case SearchCriteria.SearchFieldType.RemainingTime:
auctionData = auctionData.OrderBy(q => q.EndTime);
break;
case SearchCriteria.SearchFieldType.Keyword:
default:
auctionData = auctionData.OrderBy(q => q.Title);
break;
}
auctionData = SomeMethod();
var viewModel = new SearchViewModel();
return View("Search",viewModel);
}
做这样的事情的正确方法是什么。
答案 0 :(得分:3)
嗯,有两个选择:
将声明移至if
语句之前,并为其指定显式类型:
IQueryable<Auction> auctionData;
if (...)
{
...
}
else
{
...
}
将结构更改为只有一个声明,例如使用条件运算符:
var auctionData = !string.IsNullOrEmpty(criteria.SearchKeyword)
? db.Auctions.Where(q => q.Description.Contains(criteria.SearchKeyword))
: db.Auctions.OrderBy(item => item.EndTime);
请注意,我已将First
更改为Where
- 否则您只会匹配单个条目,这听起来不像搜索到我,并且会使方法的其余部分变得非常奇怪。
这本身就提出了第三种选择:
var auctionData = db.Auctions.OrderBy(item => item.EndTime);
var keyword = criteria.SearchKeyword;
if (!string.IsNullOrEmpty(keyword))
{
auctionData = auctionData.Where((q => q.Description.Contains(keyword));
}