.cshtml MVC 4中的WHERE子句

时间:2014-01-30 11:25:52

标签: asp.net-mvc-4 razor where

我的数据库中有3个表:

  1. 类别:ID(PK),CreationDate
  2. 语言:ID(PK),标题
  3. CategoryDe​​tails:ID(PK),CategoryID(FK),LanguageID(FK),标题,描述
  4. 我还在MVC 4中创建了一个包含所有表的ViewModel,但是当我试图在视图(.cshtml)中列出类别详细信息时,WHERE子句不能像我预期的那样工作。 我正在尝试不按键列出语言,而是按标题列出。

    @foreach (var item in Model.lstCategoryDetails)
        {
            <tr>
                <td>@item.Title</td>
                <td>@Model.lstLanguages.Title.Where(x => x.ID == @item.LanguageID)</td>
                <td>@item.Description</td>
            </tr>    
        } 
    

2 个答案:

答案 0 :(得分:3)

  • Enumerable.Where会返回另一个IEnumerable,即使这只包含一个found项。因此,请将.Where(替换为.FirstOrDefault(.Single(等。
  • 您也不需要在lambda过滤器中使用额外的@
  • 完成此操作后,访问所选Title
  • Language属性

e.g。

@Model.lstLanguages.FirstOrDefault(x => x.ID == item.LanguageID).Title

请注意,如果找不到language,您将获得NRE。

答案 1 :(得分:1)

你应该说

@Model.lstLanguages.Where(x => x.ID == @item.LanguageID).First().Title

您可以将'where,select etc ...'应用于列表,返回类型为Ienumerator。

当您申请'First()或FirstOrDefault()时,会返回您列表的元素类型。

表示exm。你有List<int> intList = (1,2,3,4,5,6).

并申请:

intList.where(p=>p == 4 || p== 5).FirstOrDefault();

作为整数类型返回给你'4'。