Linq-To-Sql,MVC,具有不同查询的可枚举结果

时间:2010-07-29 16:50:54

标签: c# asp.net-mvc linq-to-sql

我对.Net C#很新,我真的不知道我做错了什么。我有一个LinqToSql DataContext我正在绘制不同的结果,但我不确定如何在我的视图中正确输出结果。我在视图中收到编译错误(Compiler Error Message: CS1002: ; expected)

StoreRepository.cs

public IQueryable<String> GetStoreStates()
        {
            return from Store in db.Stores
                   orderby Store.State
                   select Convert.ToString(Store.State.Distinct());
        }

StoresController.cs

public ActionResult StatesIndex()
        {
            var states = repo.GetStoreStates().ToList();
            return View("StatesIndex", states);
        }

StatesIndex.aspx

<ul>
        <% foreach (var state in Model)
           { %>
        <li>
            <% Html.Encode(state) %>
        </li>
        <% } %>
    </ul>

3 个答案:

答案 0 :(得分:2)

你错过了一个等号:

        <% Html.Encode(Store.state) %>

应该是

        <% =Html.Encode(Store.state) %>

提供更多解释。如果您正在调用其中一个Html扩展方法,则需要在其前面加上等号=或冒号:,因为这些方法会输出要显示的相应HTML字符串。当你这样做时,你用分号附加你的陈述。

如果您正在调用一个不直接返回HTML字符串的方法,那么您就像普通的C#方法一样调用它,在这种情况下,您将需要分号。

当你第一次开始使用MVC时,记住何时使用equals以及何时使用分号可能会让你感到沮丧。

答案 1 :(得分:1)

您的View模型是字符串的集合,而不是商店对象。 所以当你做的时候

foreach(var Store in Model)每个Store只是一个字符串而您无法Store.state

更改GetStoreStates方法以返回商店对象列表或将foreach的内容更改为

<%= Html.Encode(Store) %>

编辑:评论后更新。

问题是您正在尝试对字符串执行Distinct()。如果它有效,它只会让你得到一个包含不同字符的字符串。

它认为这更符合您的要求:

public IQueryable<String> GetStoreStates()
{
    return (from Store in db.Stores
           orderby Store.State
           select Store.State).Distinct();
}

这将在状态列表上而不是在每个状态字符串上执行Distinct()。

答案 2 :(得分:0)

您需要repo.GetStoreStates().ToList()。没有它,你试图传递一个IQueryable作为你的模型,这本质上是一个尚未运行的查询。要运行查询,您需要调用ToList(),这将导致查询运行并返回List<type>,然后您可以循环查看。