Отображение данных из нескольких таблиц в виде списка - ASP.Net MVC - PullRequest
5 голосов
/ 06 января 2010

У меня есть следующие две таблицы (базовая схема):

Tbl_CategoryType

ID LevelID Описание

Tbl_Levels Я БЫ Имя

По сути, я хочу представить всю информацию в таблице Tbl_CategoryType, ссылаясь на данные Tbl_Levels.Name на основе номера Tbl_CategoryType.LevelID.

Я попытался использовать объединение в своем хранилище, как показано ниже;

public IQueryable GetAllTypesInCategory(int CatID)
{
     return (from x in DBEntities.LU_LST_CategoryTypeSet
             where x.CategoryID == CatID && x.Enabled == 1
             join y in DBEntities.LU_LST_LevelSet on x.LevelID equals y.ID
             select new {x, y});
}

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

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

Заранее спасибо

Ответы [ 2 ]

4 голосов
/ 06 января 2010

Используя эту строку в вашем выражении linq:

select new {x, y}

вы создаете новый анонимный тип , который отличается от ваших типов сущностей.

Я предполагаю, что вы не используете EntityFramework или какую-либо другую тяжелую среду, которая автоматически разрешает отношения с внешним ключом для создания связанных сущностей. Если true, то да, вам нужно будет создать ViewModel.

Просто создайте простой класс-оболочку, который содержит один из каждого объекта в качестве свойства.

public class MyViewModel
{
    public MyViewModel(LU_LST_CategoryTypeSet x, LU_LST_LevelSet y)
    {
        Category = x;
        Level = y;
    }

    public LU_LST_CategoryTypeSet Category { get; set;}
    public LU_LST_LevelSet Level { get; set; }
}

Затем в своем выражении Linq вместо создания анонимных типов создайте типы MyViewModel:

public IQueryable GetAllTypesInCategory(int CatID)
{
     return (from x in DBEntities.LU_LST_CategoryTypeSet
             where x.CategoryID == CatID && x.Enabled == 1
             join y in DBEntities.LU_LST_LevelSet on x.LevelID equals y.ID
             select new {x, y});
}

Затем скопируйте результаты в классы вашей модели:

   var listOfTypes = GetAllTypesInCategory(catID);
   foreach (var item in listOfTypes)
   {
      var model = new MyViewModel(item.x, item.y);

      //Do whatever with the model to get it to the view.
   }

Сделайте ваш вид наследовать от MyViewModel.

3 голосов
/ 06 января 2010

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

       public List<LU_LST_CategoryType> GetAllTypesInCategory(int CatID)  
         { 
             return (from x in DBEntities.LU_LST_CategoryTypeSet.Include("LU_LST_LevelSet") 
                     where x.CategoryID == CatID && x.Enabled == 1  
                     select x).ToList(); 
         }

Чем за каждый LU_LST_CategoryTypeSet category можно звонить category.LU_LST_Level

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