Динамическая группа LINQ By Query в ASP.NET MVC - PullRequest
3 голосов
/ 15 марта 2010

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

CONTROLLER:

var dc = new DataContextDC();
return View(dc.items.Where(i=>i.IsPublic == true));

ВИД:

<% foreach (var grp in Model.GroupBy(s => s.GroupColumn)) { %>
    <%= Html.Encode(grp.Key) %>
    <% foreach (var item in grp) { %>
        <%= Html.Encode(item.Title) %>
    <% } %>
<% } %>

Как указано, цель состоит в том, чтобы позволить пользователю выбирать, какой столбец заменяет «GroupColumn» выше. Я хотел бы избежать добавления каких-либо внешних библиотек и т. Д.

Я вижу, что использую отражение (медленное, но полностью динамическое), или, поскольку это одно представление в моем приложении, я просто дублирую приведенный выше код для каждого столбца в базе данных и затем помещаю в него оператор switch (быстрый и грязный, но эффективно)

Ответы [ 2 ]

4 голосов
/ 15 марта 2010

Вероятно, вы захотите использовать библиотеку Linq Dynamic Query , включенную в примеры C # Linq. Таким образом, вы можете написать запрос так:

var groups = Model.GroupBy("SomeColumn, SomeOtherColumn")

... что намного проще в управлении, если вы принимаете имена столбцов от пользователя - скорее всего, все, что у вас есть, - это имена столбцов в виде строк, и эта библиотека автоматически проанализирует их в лямбда-выражениях , (Вам нужно перехватить ParseException, если вы ожидаете возможность неверного ввода).

Для форматирования ключа вы, вероятно, можете просто передать его непосредственно методу Html.Encode, так как его строковое представление по умолчанию - что-то вроде { ID = 1, Name = Test }. Если это достаточно хорошо, я бы оставил это в покое, иначе вам придется использовать Reflection для анализа свойств отдельных ключей и значений свойств.

Редактировать: Вы можете использовать эту библиотеку где угодно, если вы скачаете примеры, вы увидите, что это просто файл исходного кода.

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