【问题标题】:Converting IQueryable to list and iterating using foreach将 IQueryable 转换为列表并使用 foreach 进行迭代
【发布时间】:2011-05-23 07:26:34
【问题描述】:

我是 mvc 的菜鸟。我正在使用带有 linq2sql 的存储库模式,使用 mvc 只是做一些测试以清楚地了解它周围的一切。 我正在尝试从作者表中输出作者。

public class AuthorsRepository : IAuthorRepository
{
    private Table<BK_Author> _authorsTable;

    public IQueryable<BK_Author> Authors
    {

        get { return _authorsTable.AsQueryable<BK_Author>(); }

    }

在控制器中

public class AuthorsController : Controller
{
    private IAuthorRepository _authorRepo;

    public AuthorsController()
    {
        string connectionString = "";
        _authorRepo = new AuthorsRepository(connectionString);
    }

    public ViewResult List()
    {            
        return View(_authorRepo.Authors.ToList());
    }

在视图部分

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
<div class="item">
    <% foreach (var k in Model)
       { %>
        <%: k.Author_Name %>
        <%: k.Author_email %>
        <%: k.Author_phonenumber %>
        <%: k.Author_Website %>
    <% }%>         
</div>

当我尝试运行它时,我遇到了编译器异常

“foreach 语句无法对 'BK_Author' 类型的变量进行操作,因为 'BK_Author' 不包含 'GetEnumerator' 的公共定义”

【问题讨论】:

  • foreach (var k in Model) 可能是错误的。你的意思是foreach (var k in Model.Authors)

标签: c# asp.net-mvc list iqueryable


【解决方案1】:

页面的模型以某种方式设置为BK_Author 的对象,而不是AuthorsRepository 的对象。将其设置为 AuthorsRepository 并使用其 Authors 属性访问作者列表。

【讨论】:

    【解决方案2】:

    在您的视图页面中,您可以简单地继承如下内容:

    Inherits="System.Web.Mvc.ViewPage<IEnumerable<Authors>>"
    

    或在 foreach(var k in Model) 之后,您应该将 k 大小写为以下作者:

    Authors author = (Authors)k;
    

    希望对您有所帮助!

    【讨论】:

      猜你喜欢
      • 2020-01-10
      • 1970-01-01
      • 1970-01-01
      • 2012-04-24
      • 1970-01-01
      • 2016-10-11
      • 2011-01-22
      • 1970-01-01
      • 2019-03-29
      相关资源
      最近更新 更多