2012-12-18 13 views

回答

0

嘗試

public ActionResult Index(PanelViewModel panelViewModel) 
{ 
    var proj = _panelRepository.GetPanels() 
           .Where(p => p.PanelApplicationForms.Count > 0 
             && p.PanelApplicationForms 
             .Any(f => f.PanelApplicationFormVersions 
              .Any(v => v.DueDate <= today)) 
             && p.IsPublish 
             && p.PanelApplicationForms != null) 
           .OrderBy(t => t.Title) 
           .Select(p => new { 
              Panel = p, 
              PanelApplicationForms = p.PanelApplicationForms 
              .Where(f => f.PanelApplicationFormVersions 
              .Any(v => v.DueDate <= today)) 
              }) 
           .ToList(); 

    panelViewModel.Panels = proj.Select(p => p.Panel); 

    return View(panelViewModel); 
} 
+0

我知道它是從OP的代碼,不過是啊...'p.PanelApplicationForms.Count> 0'在EF中引發異常,它應該是Any()。同樣,'p.PanelApplicationForms!= null'在EF中引發異常(無論如何都是冗餘的)。除此之外,這並不排除今天也有日期的專家組。但是OP沒有具體說明這是否是一個問題。我認爲條件應該是'All(f => f.PanelApplicationFormVersions(All(v => v.DueDate <= today))。「 –

+0

Any()和All()http:// stackoverflow之間的區別。 com/questions/9027530/linq-not-any-vs-all-dont –

+0

Eranga代碼適用於我,但有一個問題。即使只有'PanelApplicationFormVersion'的一條記錄顯示所有'PanelApplicationForms'滿足DueDate條件 如果DueDate的條件不滿足,如何不顯示'PanelApplicationForms'? –

0

@Eranga謝謝你的答案及以上評論。我得到它的工作執行以下操作,

控制器:

panelViewModel.Panels = _panelRepository.GetPanels() 
           .Where(p => p.PanelApplicationForms.Count > 0 
                && p.PanelApplicationForms 
                  .Any(f => f.IsPublish 
                    && 
                    f.PanelApplicationFormVersions.OrderByDescending(v => v.VersionNumber). 
                     First().DueDate >= DateTime.Today 
                    && f.PanelApplicationFormVersions.Count > 0 
                  ) 
                && p.PanelApplicationForms != null) 
              .OrderBy(t => t.Title); 

查看:

     @foreach (var panelApplicationFormItem in panelItem.PanelApplicationForms.Where(panelApplicationFormItem => panelApplicationFormItem.IsPublish)) 
         { 
          var panelApplicationFormVersion = panelApplicationFormItem.PanelApplicationFormVersions.OrderByDescending(v => v.VersionNumber).First(); 
          if (panelApplicationFormVersion.DueDate >= DateTime.Today) 
          { 
           <tr> 
            <td> 
             @Html.DisplayFor(modelItem => panelApplicationFormItem.Title) 
            </td> 
            <td class="span2"> 
             @if (panelApplicationFormItem.PanelApplicationFormVersions.Count > 0) 
             { 

              @Html.DisplayFor(modelItem => panelApplicationFormVersion.DueDate) 
             } 
            </td> 
            <td class="span2"> 
             @{ 
              //var isApplicationAlreadyExist = panelApplicationFormVersion.Id.IsApplicationAlreadyExist() 
             } 
             @if (panelApplicationFormVersion != null) 
             { 
              <a href="~/Application/Apply/@[email protected]rmVersion.VersionNumber" class="btn">Apply</a> 
             } 
             else 
             { 
              <a href="#" class="btn">Sum</a> 
             @*<p>No versions available to apply</p>*@ 
             } 
            </td> 
           </tr> 
          } 
         } 
相關問題