2012-09-09 14 views
12

を選択:Linq。私はこのテーブルを持っている複数のテーブルからプロジェクトで

  1. 製品(ID、たcatalogId、manufacturerId ...)
  2. カタログ
  3. メーカー

またProductモデル(id, name, catalogId, catalogTitle, manufacturerId, manufacturerName)

Product itemを取得したい場合、以下のLinqでこのSQLクエリを書く方法を教えてください。

SELECT Product.Name, Product.CatalogId, Product.ManufacturerId, [Catalog].Name, Manufacturer.Name 
FROM Product, [Catalog], Manufacturer 
WHERE [Catalog].Id=Product.CatalogId AND Manufacturer.id=Product.ManufacturerId AND Product.Active=1 
+1

何が起こったのですか? http://www.dotnetperls.com/join – TigOldBitties

+0

@TigOldBitties最近質問を編集しました。私は商品アイテムを取得したい。 –

+0

あなたが得ようとしていることに関係なく、この質問はまだ適用されます。 – TigOldBitties

答えて

40

まず、私はあなたの質問に答えます。あなたの答えにコメントします。あなたの質問に答えるには、Linqで次のようにします:

これは、あなたが要求したアイテムを持つ匿名のオブジェクトを提供します。他の場所で(動的オブジェクトを使用していない)これを使用する必要がある場合は、ビューモデルを作成し、その中の1つを選択してインスタンス化することをお勧めします。

例:

public class ProductInfoView 
{ 
    public string Name { get; set; } 
    public int CatalogId { get; set; } 
    public int ManufacturerId { get; set; } 
    public string CatalogName { get; set; } 
    public string ManufacturerName { get; set; } 
} 


from p in Product 
join c in Catalog on c.Id equals p.CatalogId 
join m in Manufacturer on m.Id equals p.ManufacturerId 
where p.Active == 1 
select new ProductInfoView() { Name = p.Name, CatalogId = p.CatalogId, ManufacturerId = p.ManufacturerId, CatalogName = c.Name, ManufacturerName = m.Name }; 

これは少し痛みを伴う結果クエリを参照するようになります。

あなたのコメントに答えるには、必要なものがすべて製品であれば、たくさんの結合をしています。あなたの基準は、唯一のあなたの製品のActiveフラグが1社の

  • あなたの製品です
    1. 三つ

      を確保する既存のカタログ・エントリー
    2. を持っているあなたの製品は、既存のメーカーエントリ

    を持っている場合は#2と# 3は余分であり、名前は必ずしも必要ではありません。

    製品がCRUDモデルである場合、メーカー/カタログ情報を含むように製品を潜在的にロードするか、前述のビューモデルを使用することができます。

    幸運を祈る!