2017-04-02 6 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 

何それがないと、それのためにということです各従業員は現在のPrincipalAmountInterestなどを取得します。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