Linq-To-Sql, MVC, Перечислимые результаты с уникальным запросом - PullRequest
0 голосов
/ 29 июля 2010

Я очень новичок в .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 ]

2 голосов
/ 29 июля 2010

Вы пропускаете знак равенства:

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

должно быть

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

Чтобы дать немного больше объяснений.Если вы вызываете один из методов расширения Html, вам необходимо поставить перед ним префикс либо знаком равенства =, либо двоеточием :, поскольку эти методы выводят соответствующую строку HTML для отображения.Когда вы делаете это, вы не добавляете свое утверждение точкой с запятой.

Если вы вызываете метод, который напрямую не возвращает строку HTML, вы вызываете его так же, как обычный C #метод, и, в этом случае, вам понадобится точка с запятой.

Запоминание того, когда использовать равно и когда использовать точку с запятой, может иметь тенденцию немного сбить вас с толку, когда вы начинаете использовать MVC.

1 голос
/ 29 июля 2010

Ваша модель 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 () в списке состояний вместо каждой строки состояния.

0 голосов
/ 29 июля 2010

Вам нужно repo.GetStoreStates().ToList(). Без этого вы пытаетесь передать IQueryable в качестве модели, что по сути является запросом, который еще не выполнялся. Чтобы выполнить запрос, вам нужно вызвать ToList(), что приведет к его выполнению и вернет List<type>, который вы затем можете просмотреть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...