2017-04-02 151 views
0

使用带参数的存储过程显示我的视图时遇到了一些问题。使用参数使用存储过程查看数据

这里是我的代码:

查看

@model IEnumerable<PEMCOLoan.DAL.Entities.spModels.getLoanWithTypes> 
 

 
@{ 
 
    ViewBag.Title = "List of Summary per Loan Types"; 
 
} 
 

 
<ul class="nav nav-tabs"> 
 
    <li class="active"><a data-toggle="tab" href="#home">Educational Loan</a></li> 
 
    <li><a data-toggle="tab" href="#menu1">Petty Cash</a></li> 
 
    <li><a data-toggle="tab" href="#menu2">Business Loan</a></li> 
 
</ul> 
 

 
<div class="tab-content"> 
 
    <div id="home" class="tab-pane fade in active"> 
 
     <h3>Educational Loan</h3> 
 
     <table class="table"> 
 
      <tr> 
 
       <th>Employee ID</th> 
 
       <th>Name</th> 
 
       <th>Loan Type</th> 
 
       <th>Principal</th> 
 
       <th>Interest</th> 
 
       <th>Total</th> 
 
      </tr> 
 

 
      @foreach (var item in Model) 
 
      { 
 
       <tr> 
 
        <td>@Html.DisplayFor(modelItem => item.EmployeeID)</td> 
 
        <td>@Html.DisplayFor(modelItem => item.FullName)</td> 
 
        <td>@Html.DisplayFor(modelItem => item.LoanTypeID)</td> 
 
        <td>@Html.DisplayFor(modelItem => item.PrincipalAmount)</td> 
 
        <td>@Html.DisplayFor(modelItem => item.Interest)</td> 
 
        <td>@Html.DisplayFor(modelItem => item.Total)</td> 
 
       </tr> 
 

 
      } 
 
     </table> 
 
    </div> 
 
    <div id="menu1" class="tab-pane fade"> 
 
     <h3>Petty Cash</h3> 
 
     <table class="table"> 
 
      <tr> 
 
       <th>Employee ID</th> 
 
       <th>Name</th> 
 
       <th>Loan Type</th> 
 
       <th>Principal</th> 
 
       <th>Interest</th> 
 
       <th>Total</th> 
 
      </tr> 
 

 
      @foreach (var item in Model) 
 
      { 
 
       <tr> 
 
        <td>@Html.DisplayFor(modelItem => item.EmployeeID)</td> 
 
        <td>@Html.DisplayFor(modelItem => item.FullName)</td> 
 
        <td>@Html.DisplayFor(modelItem => item.LoanTypeID)</td> 
 
        <td>@Html.DisplayFor(modelItem => item.PrincipalAmount)</td> 
 
        <td>@Html.DisplayFor(modelItem => item.Interest)</td> 
 
        <td>@Html.DisplayFor(modelItem => item.Total)</td> 
 
       </tr> 
 

 
      } 
 
     </table> 
 
    </div> 
 
    <div id="menu2" class="tab-pane fade"> 
 
     <h3>Business Loan</h3> 
 
     <table class="table"> 
 
      <tr> 
 
       <th>Employee ID</th> 
 
       <th>Name</th> 
 
       <th>Loan Type</th> 
 
       <th>Principal</th> 
 
       <th>Interest</th> 
 
       <th>Total</th> 
 
      </tr> 
 

 
      @foreach (var item in Model) 
 
      { 
 
       <tr> 
 
        <td>@Html.DisplayFor(modelItem => item.EmployeeID)</td> 
 
        <td>@Html.DisplayFor(modelItem => item.FullName)</td> 
 
        <td>@Html.DisplayFor(modelItem => item.LoanTypeID)</td> 
 
        <td>@Html.DisplayFor(modelItem => item.PrincipalAmount)</td> 
 
        <td>@Html.DisplayFor(modelItem => item.Interest)</td> 
 
        <td>@Html.DisplayFor(modelItem => item.Total)</td> 
 
       </tr> 
 

 
      } 
 
     </table> 
 
    </div> 
 
</div>

我想在我看来是我想看看什么类型的贷款是它假定与工作台相处。例如,如果我有贷款类型1,2,3,如果贷款类型1将与Educational Loan一起记录,则2将使用零用现金等等......这里是我工作的图片。 Educational Loan其余面板上的情况与此相同。

控制器

现在我有这个暂时

 [HttpGet] 
    public IActionResult Index() 
    { 
     return View(_Context.Set<getLoanWithTypes>().FromSql("sp_GetLoanTypesWithPrincipal").AsNoTracking()); 
    } 

这里是我的参数部分代码

 [HttpGet] 
    public IActionResult Index(getLoanWithTypes glwt) 
    { 



     return View(_Context.Set<getLoanWithTypes>().FromSql("sp_GetLoanTypesWithPrincipal @p0 = {0}, @p1 = {1}", glwt.EmployeeID.ToString(), glwt.LoanTypeID.ToString()).AsNoTracking()); 
    } 

我的Cuz一个小问题,它我不知道如何传球从视图的比例。我想要做的是我想在加载视图时为每个LoanTypeID设置参数。或者只需单击每个面板,即可设置参数LoanTypeID

SQL: 参数: @empID AS INT = NULL, @loanID AS INT = NULL

查询:

SELECT 
[EmployeeID] = emp.EmployeeID, 
[FullName] = emp.FName + ' ' + emp.LName, 
[LoanTypeID] = lt.LoanTypeID, 
[PrincipalAmount] = (SELECT ISNULL(SUM((CAST(((lc.LoanAmount)/((dbo.fnNumberOfYears(CONVERT(VARCHAR(15), LoanDateStart, 101), CONVERT(VARCHAR(15), LoanPaymentDue, 101)) * 12) * 2)) AS DECIMAL(18,2)))),0) FROM LoanContract lc INNER JOIN LoanType lt ON lt.LoanTypeID = lc.LoanTypeID WHERE lc.LoanTypeID = @loanID AND lc.EmployeeID = emp.EmployeeID), 
[Interest] = (SELECT ISNULL(SUM((CAST((((lt.InterestRate/100) * lc.LoanAmount)/((dbo.fnNumberOfYears(CONVERT(VARCHAR(15), LoanDateStart, 101), CONVERT(VARCHAR(15), LoanPaymentDue, 101)) * 12) * 2)) AS DECIMAL(18,2)))),0) FROM LoanContract lc INNER JOIN LoanType lt ON lt.LoanTypeID = lc.LoanTypeID WHERE lc.LoanTypeID = @loanID AND lc.EmployeeID = emp.EmployeeID), 
[Total] = (SELECT ISNULL(SUM((CAST(((((lt.InterestRate/100) * lc.LoanAmount) + lc.LoanAmount)/((dbo.fnNumberOfYears(CONVERT(VARCHAR(15), LoanDateStart, 101), CONVERT(VARCHAR(15), LoanPaymentDue, 101)) * 12) * 2)) AS DECIMAL(18,2)))),0) FROM LoanContract lc INNER JOIN LoanType lt ON lt.LoanTypeID = lc.LoanTypeID WHERE lc.LoanTypeID = @loanID AND lc.EmployeeID = emp.EmployeeID) 
FROM Employee emp 
    INNER JOIN Salary sal ON sal.EmployeeID = emp.EmployeeID 
    INNER JOIN LoanContract lc ON lc.EmployeeID = emp.EmployeeID 
    INNER JOIN LoanType lt ON lt.LoanTypeID = lc.LoanTypeID 
    LEFT JOIN LoanPayments lp ON lp.LoanID = lc.LoanID 
    LEFT JOIN LoanFrequency lf ON lf.LoanFrequencyID = lc.LoanFrequencyID 
WHERE emp.EmployeeID IN (SELECT EmployeeID FROM Employee WHERE EmployeeID LIKE '%' + CASE WHEN ISNULL(@empID,0) <> 0 THEN CAST(ISNULL(@empID, 0) AS VARCHAR(15)) ELSE '' END + '%') 
    AND lc.LoanTypeID IN (SELECT LoanTypeID FROM LoanType WHERE LoanTypeID LIKE '%' + CASE WHEN ISNULL(@loanID,0) <> 0 THEN CAST(ISNULL(@loanID, 0) AS VARCHAR(15)) ELSE '' END + '%') 
GROUP BY emp.EmployeeID, lt.LoanTypeID, emp.FName, emp.LName 
ORDER BY emp.EmployeeID ASC 

它所做的是,它为每个员工将获得他们当前的PrincipalAmount,Interest等等...如果PrincipalAmount具有相同的LoanTypeID并且EmployeeID然后它将计算和总和。下面是示例图片Query Sample Picture

我对asp.net核心和ef核心有点新,也没有先进的知识。

希望这足以应付一切。任何好的参考读或建议将不胜感激!谢谢!

回答

0

您可以构建一个DbParameter并将其作为参数值提供。 这允许您使用命名参数在SQL查询字符串

var employeeId = new SqlParameter("empID", glwt.EmployeeID); 
var loanTypeId = new SqlParameter("loanID", glwt.LoanTypeID); 
var data = _Context 
       .Set<getLoanWithTypes>() 
       .FromSql("EXECUTE sp_GetLoanTypesWithPrincipal @empID, @loanID", employeeId, loanTypeId) 
       .AsNoTracking(); 
return View(data); 

该框架将匹配参数到命令。

参考 - Raw SQL Queries

相关问题