2017-08-16 29 views
0

私はMVCに取り組んでいます。MVCはユーザーにリクエストの一覧を表示します。モデルは次のようになります。ラムダ式がデリゲート型ではないため 'bool'型に変換できませんか?

public class RequestModel 
{ 
    public string Status { get; set; } 
} 

そして、コントローラは、このようなものになります。

public ActionResult Index() 
{ 
    return View(db.Requests.ToList()); 
} 

を私は、ステータスが「保留」と要求のリストを表示するには、インデックスビューのページをしたいと思います

:しかし、これは私に次のエラーを与える

<table class="table"> 
    @foreach (var item in Model) 
    { 
     <tr> 
      <td> 
       @if (modelItem => item.Status == "Pending") 
       { 
        @Html.DisplayFor(modelItem => item.Status) 
       } 
      </td> 
     </tr> 
    } 
</table> 

:私は、次のコードで試みました

Cannot convert lambda expression to type "bool" because it is not a delegate type.

このエラーの意味とその対処方法がわかりません。誰かが何か助けやアドバイスがあれば、私はそれを高く評価します。

+0

ではありません> x。ステータス:= "保留中"))); –

答えて

3

あなたの条件は、次のようになります。あなたは、単純な条件を必要とするラムダ式(modelItem => item.Status == "Pending")を使用しようとしている

@if (item.Status == "Pending") 

+0

ああ、そのトリックをした、ありがとう –

+0

それはnull可能なタイプの場合いくつかのボクシング作業を行う –

+0

@Saneeshkunjunni何を意味するのですか? –

3

このmodelItem => item.Status == "Pending"を書くことによって、あなたは関数定義されています

Func<string,bool> someFunc = (str) => str == "Pending"; 

を、あなたはあなたの文が代わりに評価boolを有しているとあなたが持っているif文ということを意味し、以下のようになります場合は、その取得委譲オブジェクト。

if(someFunc) // causes compilation error 
{ 
    // some code 
} 

それは関数を呼び出すとなりブール結果を評価されていないことに注意してください:

if(someFunc(item.Status)) 
{ 
    // some code 
} 

ビューには、必ず必要な場合modelItem =>


を削除し、それを修正するには「保留中」のステータスを持つアイテムは、フィルタリングロジックをコントローラに移動し、返されたコレクションにWhere句を追加することを検討します。

+0

私は最初にそのような関数を使っていましたが、それを説明してくれてありがとう –

+0

@ User2294しかし、最初に 'if'文を使ったのは初めてですか? – DavidG

2

他の回答で示唆されているように、@if (item.Status == "Pending")で問題を解決する必要があります。

modelItem => item.Status == "Pending"は、Funcを作成します。 (匿名メソッドとラムダ式への新しいしている場合、これらのビデオは非常に参考になります:Tuts+kudvenkatkudvenkat)あなたのビューでのみ保留のアイテムが必要な場合は、

また、あなたはそれらをフィルタリングすることができますコントローラ自体。 `ビューを返す(db.Requests..Where(X = - あなたの要求のテーブルが何千ものレコードを持っている場合は、あなたのビューでそれらをループすることはちょうどビューに自分のパスの前にそれをコレクションをフィルタリングし、効率的な

public ActionResult Index() 
{ 
    return View(db.Requests.Where(r => r.Status == "Pending").ToList()); 
} 
関連する問題