asp.net-mvc如何初始化 var,它使用一种方法在不同的事情时

发布时间: 2017/3/25 1:31:45
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有一个方法在我正在执行一些逻辑基于提交数据的控制器和我 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);
}

什么是正确的方法来做这样的事情。

解决方法 1:

好吧,两个选项︰

  • 将变量声明移到之前 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);
    

请注意,我已经改变了 FirstWhere 这里-否则你将只会匹配单个条目,这听起来很多搜索不到我,并将其余的方法很奇怪。

这本身意味着第三个选项︰

var auctionData = db.Auctions.OrderBy(item => item.EndTime);
var keyword = criteria.SearchKeyword;
if (!string.IsNullOrEmpty(keyword))
{
    auctionData = auctionData.Where((q => q.Description.Contains(keyword));
}
赞助商