调用两个存储过程并将结果合并到一个控制器中的单个模型中

时间:2016-08-11 15:49:21

标签: c# asp.net sql-server asp.net-mvc web

我试图从我的MVC5 Web应用程序中的一个控制器调用多个存储过程。然后我将两个程序的结果合并为一个模型。

public ActionResult ItemDetails(string itemNo, string custNo)
{
    SqlParameter[] param =
   {
     new SqlParameter("@itemNo",itemNo),
     new SqlParameter("@custNo", custNo)
    };

    var sqlData = itemDb.Database.SqlQuery<ItemDetailsModel>("ItemDetail @itemNo, @custNo", param).ToList();

    var whsID = new SqlParameter("@warehouse", sqlData?[0].WhsID);

    var sqlData2 = itemDb.Database.SqlQuery<ItemDetailsModel>("ItemPoLookup @itemNo, @warehouse", new SqlParameter("@itemNo", itemNo), whsID).ToList();

    sqlData.AddRange(sqlData2);

    return View(sqlData);
}

是否可以在保持模型分离的同时实现这一目标? 我是否应该向我的Web服务器发出两个请求,每个存储过程一个请求,而不是将这些请求合并为一个?如果是这样,我们将非常感谢将多个模型返回到cshtml视图的建议。

2 个答案:

答案 0 :(得分:1)

如果您不想创建其他ViewModel并希望结果分开,请使用此(在视图中使用此模型时可能无法获得智能感知)

dynamic viewModel = new ExpandoObject();
viewModel.sqlData = sqlData;
viewModel.sqlData2 = sqlData2;

return View(viewModel);

答案 1 :(得分:1)

传递

List<List<<ItemDetailsModel>>

Dictionary<string, List<ItemDetailsModel>>`

如果您使用的是Dictionary<TKey, TValue>,则可以传递一个字符串来标识两个存储过程。