我正在开发一个Asp.Net MVC应用程序,并且对Linq和CodeFirst还是陌生的。在我的控制器中,这是我编写的动作:

public ActionResult Filter(int? PaperType , int? PaperGram , int? Brand)
{
    var FilteredResult ;
    if (PaperType.HasValue && PaperGram.HasValue && Brand.HasValue) {
        FilteredResult = db.Stocks.where(m => m.PaperType == PaperType && m.PaperGram == PaperGram && m.Brand == Brand);
    }
    else if (PaperType.HasValue && PaperGram.HasValue) {
        FilteredResult = db.Stocks.where(m => m.PaperType == PaperType && m.PaperGram == PaperGram);
    }
    else if (PaperType.HasValue && Brand.HasValue) {
        FilteredResult = db.Stocks.where(m => m.PaperType == PaperType && m.Brand == Brand);
    }
    // and ifs continue to last
    /*
    .
    .
    .
    .
    */
    else {
        FilteredResult = db.Stocks;
    }

    return View(FilteredResult);
}


但是我知道这不是在Linq和Codefirst中最好的方法。那么,您能为这个问题提供更好的解决方案吗?

最佳答案

你可以这样做:

FilteredResult = db.Stocks.where(m => (m.PaperType == PaperType || !PaperType.HasValue)
                                   && (m.PaperGram == PaperGram || !PaperGram.HasValue)
                                   && (m.Brand     == Brand     || !Brand.HasValue));

09-26 15:48