2016-10-28 13 views
0

ここで他のいくつかの質問を見て、私の答えを見つけることができませんでした。たぶん私は適切なキーワードで検索していないでしょう。asp.netの結果セットに項目を追加するmvc entity 5

public partial class CheckDirectReports_Result 
{ 

    [Key] 
    public Guid? id { get; set; } 
    public string NAME { get; set; } 
    public string EMPLID { get; set; } 
    public short EMPL_RCD { get; set; } 
    public bool hasSignedOff { get; set; } 
} 

私は実行して結果を返すストアドプロシージャを持っています。私はその後、結果をループし、IDが存在するかどうかを比較したいと思います。私はビューに表示するレコードにboolフラグを追加したい場合。私が最初に私がループし、すべてのものに入れる前に、それはこのように返していた

 var q = results.CheckDirectReports(EMPLID); 


     foreach (var i in q.ToList()) 
     { 
      var g = results.PERSON_SIGN_OFF.Where(p => p.EMPLID == i.EMPLID).FirstOrDefault(); 
      if(g != null) 
      { 
       i.hasSignedOff = true; 
      } 
      else 
      { 
       i.hasSignedOff = false; 
      } 
     } 

     return View(q); 

return View(q.AsEnumerable()); 

をうまく働いた問題は、クエリの結果が複数回列挙することができない私に語っています。ここで

が私の見解です:

@model IEnumerable<CodeOfConduct.Models.CheckDirectReports_Result> 

<h2>Manager Sign Off</h2> 


@using (Html.BeginForm("Save", "Manager", FormMethod.Post)) 
{ 

<table class="table"> 
    <thead> 
     <tr> 
      <th>Name</th> 
      <th>Employee ID</th> 
      <th></th> 
      <th>Select</th> 
     </tr> 
    </thead> 
    <tbody> 
     @foreach(var c in Model) // Print the list 
     { 
      <tr> 

       <td>@c.NAME</td> 
       <td>@c.EMPLID </td> 

       @{ 
      if (c.hasSignedOff == true) 
      { 
       <td class="bg-success">Employee Has completed Sign-off</td> 
      } 
      else 
      { 
       <td class="bg-danger">Employee has not completed Sign-off</td> 
      } 
} 

       <td> 

        @Html.ActionLink("Select Employee", "SignOff", new { ids=c.EMPLID, name = c.NAME }) 



       </td> 
      </tr> 
     } 
    </tbody> 

</table> 

は、なぜそれがクエリの結果が複数回列挙することができない私に言っていますか?

+0

についての詳細を知っている必要があるだろうか? 'return View(q);または' return View(q.AsEnumerable()); '?? 'return View(q);'はうまく動作するはずです。 – JamieD77

+0

'return View(q)'が返されますが、ビューはエラーがスローされる場所です。私は下の応答を試み、それが動作するかどうかを見ます。 – mdarling

答えて

1

IEnumerable()が必要なビューにList()を返すことができます。あなたのforeachの中

は、あなたはいくつか存在する場合、この

var q = results.CheckDirectReports(EMPLID).ToList(); 
    q.ForEach(a => { 
     a.hasSignedOff = results.PERSON_SIGN_OFF.Any(p => p.EMPLID == a.EMPLID) 
    }); 
    return View(q); 

のようにLINQを使用してコードを短くすることができますだけではなく、q.AsEnumerable()

qを返すq.ToList()を実行して結果Qを列挙しますresults.PERSON_SIGN_OFFのレコード私はそれらをすべてToList()を選択し、EMPLIDが存在するかどうかチェックして複数のヒットを防ぐ。

var q = results.CheckDirectReports(EMPLID).ToList(); 
    var signOffs = results.PERSON_SIGN_OFF.ToList(); 
    q.ForEach(a => { 
     a.hasSignedOff = signOffs.Any(p => p.EMPLID == a.EMPLID) 
    }); 
    return View(q); 

あなたが実際に今何を使っているので、そこにこれを行うにしても良い方法かもしれませんが、我々はあなたのデータ構造

+0

あなたは素晴らしいです!私はあなたが与えた2番目の例にクエリを変更し、それは魅力のように動作します! – mdarling

関連する問題