如何在将var用于方法中的不同内容时初始化var

时间:2015-03-17 19:05:36

标签: c# asp.net asp.net-mvc linq var

我的控制器中有一个方法是根据提交的数据执行某些逻辑,我的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 个答案:

答案 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));
}
相关问题