0

私は4つのテーブル/クラスを持っています

public Class Brands
{
  public int Id {get;set;}
  public string Brand {get;set;}
  public String BrandType {get;set;}
}

public Class ManufactureA
{
  public int Id {get;set;}
  public int BrandsId {get;set;}
  public string Product {get;set;} 
  public int Distributor {get;set;}
}

public Class ManufactureB
{
  public int Id {get;set;}
  public int BrandsId {get;set;}
  public string Product {get;set;}
  public int Distributor {get;set;}
}

public Class ManufactureC
{
  public int Id {get;set}
  public int BrandsId {get;set;}
  public string Product {get;set;}
  public int Distributor {get;set;}
}

public Class ManufactureD
{
  public int Id {get;set;}
  public int BrandsId {get;set;}
  public string product {get;set;}
  public int Distributor {get;set;}
}

ブランドと関連する製造元からの情報を表示するテーブルを作成しようとしています。例えば:

ブランド1:

製品A、ディストリビュータA

ブランド 2:

製品B、ディストリビューターB

ブランド3:

製品C、ディストリビューターC

Brand4:

製品D、販売業者D

だから私はこのコードから始めましたが、実際にグループ化または投影する方法を決定する時点で混乱しました:

var allBrandsManufactures = from brand in Brands
                            join factoryA in ManufactureA on factoryA.BrandsId equals brand.Id
                            join factoryB in ManufactureB on factoryB.BrandsId equals brand.Id
                            join factoryC in ManufactureC on factoryC.BrandsId equals brand.Id
                            join factoryD in ManufactureD on factoryD.BrandsId equals brand.Id
4

1 に答える 1

0

まず、可能であれば、データベースの設計をやり直すことを検討する必要があります。現在、デザインにはテーブル名に情報が含まれています。すべての製造テーブルを、おそらく製品と呼ばれる 1 つに結合できるはずです。次に、製造元を示す追加の列が必要です。このような。

public class Products
{
  public int Id {get;set;}
  public int BrandsId {get;set;}
  public string ProductName {get;set;} 
  public int Distributor {get;set;}
  public string Manufacturer {get;set;}
}

または、別の製造元テーブルを作成し、製品テーブルを外部キーを介してリンクすることもできますが、これは、DB に入れたい追加の製造元データがある場合にのみ必要です。次に、新しい製造元を取得した場合、新しいテーブルを作成する必要はありません。また、クエリがはるかに簡単になります。

この設計に固執している場合は、結合の代わりにユニオンを使用することをお勧めします。最良の方法は、各メーカーのクエリを個別に実行してConcatから、それらを組み合わせて使用​​することです。

var brandA = from brand in Brands
         join factoryA in ManufactureA on brand.Id equals factoryA.BrandsId
         select new { 
            Brand = brand.Brand, 
            Product = factoryA.Product, 
            Distributor = factoryA.Distributor, 
            Manufacturer = "A"};

var brandB = from brand in Brands
         join factoryB in ManufactureA on brand.Id equals factoryB.BrandsId
         select new { 
            Brand = brand.Brand, 
            Product = factoryB.Product, 
            Distributor = factoryB.Distributor, 
            Manufacturer = "B"};

var brandC = from brand in Brands
         join factoryC in ManufactureA on brand.Id equals factoryC.BrandsId
         select new { 
            Brand = brand.Brand, 
            Product = factoryC.Product, 
            Distributor = factoryC.Distributor, 
            Manufacturer = "C"};

var brandD = from brand in Brands
         join factoryD in ManufactureA on brand.Id equals factoryD.BrandsId
         select new { 
            Brand = brand.Brand, 
            Product = factoryD.Product, 
            Distributor = factoryD.Distributor, 
            Manufacturer = "D"};

var result = brandA.Concat(brandB).Concat(brandC).Concat(brandD);

もちろん、好きなものを選択できますが、各クエリで同じものを選択し、プロパティに同じ名前を使用する必要があります。

于 2012-12-21T04:04:31.130 に答える