У меня есть следующие две таблицы (основная схема):
Tbl_CategoryType
Идентификатор описание LevelID
Идентификационное название Tbl_Levels
В основном я хочу представить всю информацию в таблице Tbl_CategoryType при ссылке на Tbl_Levels. Данные имени на основе 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});
}
Однако, когда я называю тот метод нет никакого типа, который я могу присвоить ему тому, поскольку он не вписывается в тип или Категории или Уровня.
Я предполагаю, что должен сделать это через пользовательский viewmodel, но не могу выяснить шаги.
Заранее спасибо
] Если между двумя сущностями существует ассоциация, то с ее помощью можно получить доступ ко второму типу. Единственное, что вам нужно сделать в этом случае, это использовать 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.LU_LST_Level[
][
]Используя эту строку в операторе linq:[
] [select new {x, y}
]
[]вы создаете новый []анонимный тип[], который отличается от ваших типов Entity (сущностей).[
] []Я предполагаю, что вы не используете EntityFramework или какой-нибудь другой тяжелый фреймворк, который будет автоматически разрешать внешние ключевые отношения для создания связанных сущностей. Если это так, то да, вам нужно будет создать 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.
}
]
[]Сделайте свой View наследуемым от MyViewModel.[
].