2016-05-19 1 views
1

私の問題は、データモデルに「サブデータモデル」を設定しています この場合、私は多くの製品を入手しました。各製品は分類されていますが、一部の製品はまったく分類されていません。製品は、いくつかのカテゴリにリンクすることさえできます。どのように私はこれを行うになっているか分からない。 これは私がこれまでに得たものである:データモデルに多対1の関係を設定する

データベース、tablestructure:

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

データモデル:

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() 
      }; 
関連する問題