ASP.NET MVC - объединение таблиц с использованием LINQ - PullRequest
1 голос
/ 19 ноября 2009

Моя заявка имеет структуру:

namespace DomainModel.Abstract
{
    public interface IContentItemsRepository
    {
        IQueryable<Content> ContentItems { get; }
        IQueryable<Category> Categories { get; } 
        IQueryable<ContentCategory> ContentCategories { get; }
    }
}

namespace DomainModel.Entities
{
    [Table(Name = "Content")]
    public class Content
    {
        [Column(IsPrimaryKey = true, 
              IsDbGenerated = true, 
              AutoSync = AutoSync.OnInsert)]
        public int content_id { get; set; }
        [Column]
        public string type { get; set; } // article, video, recipe, tool
        [Column]
        public string title { get; set; }
...

namespace DomainModel.Entities
{
    [Table(Name = "Content_Categories")]
    public class ContentCategory
    {
        [Column(IsPrimaryKey = true, 
              IsDbGenerated = true, 
              AutoSync = AutoSync.OnInsert)]
        public int content_category_id { get; set; }
        [Column]
        public int content_id { get; set; }
        [Column]
        public int category_id { get; set; }
...

namespace DomainModel.Entities
{
    [Table(Name = "Categories")]
    public class Category
    {
        [Column(IsPrimaryKey = true, 
              IsDbGenerated = true, 
              AutoSync = AutoSync.OnInsert)]
        public int category_id { get; set; }
        [Column]
        public string category_name { get; set; }
        [Column]
        public string type { get; set; } //recipe,tool,other 
        [Column]
        public int ordering { get; set; }
...

Я могу сделать это:

var articlesInCategory = _contentRepository.ContentItems
            .Where(x => x.type == "article");

и получите список статей. Нет проблем.

Однако теперь мне нужно выбрать контент на основе категорий. Итак, мне нужно присоединить Content к ContentCategory к Category.

Понятия не имею, как это сделать. Любая помощь будет высоко ценится.

Спасибо.

EDIT:

Я думаю, что часть моей проблемы в том, что я даже не знаю, как назвать то, что я делаю, поэтому трудно это найти. Я даже делаю LINQ to SQL или LINQ to Entities, или это LINQ to Objects?

Ответы [ 2 ]

1 голос
/ 19 ноября 2009

Запрос на присоединение будет выглядеть примерно так.

var content=
from category  in _contentRepository.Category
join  contentCategory in _contentRepository.ContentCategory
on category.category_id equals contentCategory.category_id 
join content in _contentRepository.Content
on content.content_id equals contentCategory.content_id
where category.category_id==@yourcategoryId 
select new {type , title  }
1 голос
/ 19 ноября 2009

Понятие, которое вы ищете, называется linM в linq, и для этого есть несколько способов.

Один из них:

var content = 
from category in _categoryRepository.CategoryItems
join contCat in _contentCategoryRepository.Items
on category.category_id == conCat.category_id
where category.category_id == parameter
select contCat.content_id;

Отсюда вы сможете расширить его до получения всех необходимых вам данных ... посмотрите ключевое слово into и проверьте эту ссылку , если вы еще этого не сделали.

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