2016-05-19 4 views
1

Моя проблема заключается в заполнении базы данных с помощью «поддатомодели» В этом случае у меня появилось много продуктов. Каждый продукт классифицируется, но некоторые продукты не классифицируются вообще. Продукт может быть связан даже с несколькими категориями. Не знаю, как я должен это делать. Это то, что я до сих пор:Заполнять datamodel с отношением «0 ко многим»

базы данных, tablestructure:

tProduct 
    ProductId int 
    ProductName varchar(250) 
tCategory 
    CategoryId int 
    CategoryName varchar(250) 
tLinkProductCategory 
    ProductId int 
    CategoryId int 

DataModel:

public class ProductModel 
{ 
    public int ProductId; 
    public string ProductName 
    public IEnumerable<CategoryModel> Categories; 
} 
public class CategoryModel 
{ 
    public int CategoryId; 
    public string CategoryName; 
} 

Запрос:

public IQueryable<ProductModel> GetProductQuery() 
{ 
    var query = from product in DataContext.tProduct 
      //left join 
      from linkProductCategory in DataContext.tLinkProductCategory.Where(e => e.ProductId == product.ProductId).DefaultIfEmpty() 
      //left join 
      from category in DataContext.tCategory.Where(e => e.CategoryId == linkProductCategory.CategoryId).DefaultIfEmpty() 

      select new ProductModel() { 
      ProductName = product.Name 
      Categories = //something missing here 
      }; 
    return query; 
} 

UPDATE Этот подход сделал хитрость:

.. 
select new ProductModel() { 
    ProductName = product.ProductName, 
    Categories = product.tLinkProductCategory.Select(c => new CategoryModel 
    { 
     CategoryID = c.tCategory.CategoryId, 
     CategoryName = c.tCategory.CategoryName 
    } 
} 
... 

ответ

1

Попробуйте этот запрос:

from product in DataContext.tProduct 
select new ProductModel() 
      { 
      ProductName = product.ProductName, 
      Categories = (from category in DataContext.tCategory 
          join linkProductCategory in DataContext.tLinkProductCategory on category.CategoryId equals linkProductCategory.CategoryId 
          where linkProductCategory.ProductId == product.ProductId 
          select category 
          ).ToList() 
      }; 
Смежные вопросы