Заполнение списка Childnode: путаница Linq и разделение проблем - PullRequest
0 голосов
/ 17 ноября 2009

Я пытаюсь реализовать представление дерева в моем приложении. Я использую MVC2 Preview 1 и SubSonic 3 SimpleRepository. Я новичок в MVC и Linq.

Моя проблема в том, что я не уверен, как добавить список дочерних узлов в запись модели, которую я передаю обратно в представление. Поэтому я добавил IEnumerable с именем Children в свой класс модели, который я заполняю в действии контроллера:

public class Category
{
    public Category()
    {

    }

    public int ID { get; set; }
    public int? ParentId { get; set; }
    [Required(ErrorMessage="Name is required")]
    public string Name { get; set; }
    [SubSonicIgnore]
    public IEnumerable<Category> Children { get; set; }

}

Затем в действии контроллера я извлекаю все записи и перебираю обновления элемента Children:

    public ActionResult Index()
    {
        var categories = _repo.All<Category>();

        foreach (var c in categories)
        {
            c.Children = from p in _repo.All<Category>()
                                               where p.ParentId == c.ID
                                               orderby p.Name
                                               select p;
        }   
        return View(categories);     
     }

Мои 2 вопроса # 1 Почему это не работает? Вне рамок цикла мои изменения теряются. # 2 В общем смысле, это правильный подход? Вставка этого кода в контроллер выглядит как хак.

1 Ответ

0 голосов
/ 17 ноября 2009

Относительно того, почему это не работает, я подозреваю, что отсроченное выполнение получает вас. Если вы оберните запрос Linq следующим образом: ( from ... select p).ToList(), запрос будет оценен.

Что касается подхода, то это доступ к данным на уровне представления, так что, вообще говоря, этого следует избегать.

...